Timperley AK
Good morning, Aisha RP since 08:55NHS: R8003 · 41m
Queue — actionable15
New EPS scripts23
Services due today7
Gate-blocked ££830
Needs attention
Severe interaction pending override
Susan Bell — warfarin + miconazole
FP34C declaration due in 2 days
£830 gate-blocked will miss the month
Fridge log gap — Saturday
Fridge 2 has no reading for 7 Jun
Today
Emergency supplies — Rx-to-follow overdue2 overdue
Round A out — 3 of 11 stops doneLive
NMS follow-ups due4
AAH order cutoff 16:302h 14m
Oakwood MDS batch — assemblyIn prep
Dispensing queue15 active · Timperley
AllEPSeRDPaperMDSInstalmentVetFP10PCDUrgent
Filters (incumbent parity · G2.1):
Received 3
Margaret Thompson3 itemsEPSAge exempt09:42Assign
John Okafor1 itemeRD 2/6RTEC ✓09:40Assign
Priya Patel5 itemsEPSRTEC pending09:38Patient waiting
Bella (Border Collie)owner J. Okafor · 1 itemVet · POM-VNo NHS — private+VAT09:35Assign
Derek Shaw1 item · diazepam 5mgFP10PCD · Sch 3FP10DT + collector req’d09:34Assign
Labelling 2
Derek Shaw2 itemsEPSCharge ×209:36LabellingTM
Marcus Webb3 itemsEPS Gate-blocked: CHARGE_RESOLVED, EXEMPTION_EVIDENCE09:33Labelling
Clinical check 4
Susan Bell4 itemsEPSRTEC ✓ maternity09:31CheckingAK
Oakwood Care Home14 items · batchMDS09:20Batch
Accuracy check 1
Leon Murphy2 itemsEPSCharge unresolved09:12ScanTM
Ready — checked & bagged 5
Ahmed Hassan2 itemsDeclaration ✓EPS09:05Ready
Eleanor Wright1 itemAge exemptPaper08:58Ready

Double-click a status pill to advance (audited via the state-machine service) · drag between groups to reassign · F2 jumps to next actionable · scanner input always captured.

Rx — Margaret ThompsonEPS acuteReceived
Short-form ID 9A3F2E-X81004-44C7Z1 · signed by Dr R. Mehta (GP, Park Road Surgery A81021) · 12 Jun 2026
ItemQtyStatus
Amlodipine 5mg tablets28To dispense
Atorvastatin 40mg tablets28To dispense
Levothyroxine 75mcg tablets28To dispense
Exemption: Age (78) — derived from DOB, no RTEC call needed. Charge status: exempt.
Same-day supply detected — Levothyroxine 75mcg
This patient already received 1 supply of this item today (09:10 emergency supply, 7 tablets). A picking/double-supply interrupt fires before this item dispenses — distinct from the CDS duplicate-therapy screen (§2.13 / B3-1).
Patient
Margaret Thompson · 78 · NHS 485 777 3456 PDS ✓
Large print Oakwood
Stock (StockIQ · as of 09:41)
Amlodipine 5mgOn hand 42
Atorvastatin 40mgLow — 6
Levothyroxine 75mcgOn hand 28
History
Received 09:42 (EPS nominated release) · assigned — · correlation 7f3a…
Clinical check — Susan BellB0068 ✓RTEC maternity
Susan Bell · 72 · ♀ · NHS 943 476 5919 PDS ✓
Penicillin allergy Maternity (RTEC)
Items (4)
Warfarin 3mg tablets ×28
Amoxicillin 500mg capsules ×21
Miconazole oral gel 80g
Atorvastatin 20mg tablets ×28
Decision-support categories screened: Interaction · Allergy · Dose · Duplicate · Pregnancy/lactation · Contraindication. Every red resolves and every amber acknowledges before Approve unlocks.
SEVERE — Interaction · bleeding risk
drug_drugevidence: studyonset: delayed
Miconazole significantly potentiates warfarin (CYP2C9 inhibition). Resolve before approval — no silent pass. Management: avoid concurrent use / suspend miconazole, monitor INR.
Source key DDI-W3MI · ref_cds_interactions · FDB interactions v126 (native severe → contraindicated)
Warning — Interaction · alcohol
drug_alcoholevidence: theoreticalonset: rapid
Miconazole + alcohol — flushing/nausea (disulfiram-like) reported. Sub-type also feeds the BNF cautionary-label lookup → label 2 "avoid alcoholic drink".
Source key DAI-MZ2 · ref_cds_interactions · interactions v126 · not yet acknowledged
Warning — Allergy class
allergen_code: penicillin (FDB) cross-sens: beta-lactam
Amoxicillin vs recorded penicillin allergy (severity: moderate, GP record, coded — machine-screened).
allergy v89 · not yet acknowledged
Uncoded allergy notes (verbatim)
"Came up in blotches with co-codamol once — also says shellfish disagrees with her."
Warning — Duplicate therapy
Atorvastatin (this Rx) duplicates simvastatin 20mg on the current medication set — same therapeutic class (HMG-CoA reductase inhibitor).
duplicate v41 · not yet acknowledged
Pregnancy — not screened
pregnancy v18 · lactation v18
Dose within range
All doses within band for the patient inputs available.
Resolved band: adult 18–64, 80 kg (from age + weightKg; no paediatric/BSA band applied).
Renal / hepatic band not evaluated — no eGFR/CrCl or LFT on record (reported not-evaluated, never "within range").
ref_cds_dose_ranges · dose v54 · inputs used: ageYears, weightKg · absent: eGFR, hepaticImpairment
AI — ADVISORY ONLY
Suggest counselling on bleeding signs; consider INR recheck timing. Never blocks or passes the check.

Screened by cds module · FDB Multilex 2026.05 — interactions v126, allergy v89, dose v54, duplicate v41, pregnancy v18, lactation v18 (per-card version shown above) · patient record as of 09:31 · result snapshot retained (device traceability).

Accuracy check — Leon Murphy2 packs
PrescribedScanned (GTIN → AMP)Batch / expiryVerdict
Sertraline 50mg tablets ×28 (VMP)Sertraline 50mg — Zentiva (AMP)L2406A · 03/2028 Match
Salbutamol 100mcg inhaler ×1— awaiting scan —Pending
A scan resolving to a different VMP fails hard and one-tap drafts a near-miss (LASA/picking). Offline: resolves against the cached dm+d slice; unresolvable → explicit “cannot verify offline”, never auto-pass.
Handout — Ahmed HassanReady · checked & bagged
Collector
Collector type
Name
No Sch 2 CD lines — FP10DT token not required. CD handout would demand collector identity + ID check + FP10DT signature before completion.
Charges (claims-finance panel)
RTEC check (at labelling)No match
Items chargeable2 × £9.90 = £19.80
Resolve charge status
Declaration category (effective-dated)

Income Support / income-based JSA removed 15 Apr 2026 — picker only offers currently-effective categories. DN + PSU “collected” fire on completion.

ETP / EPS console Spine connected
New scripts 5 In progress 3 Dispensed 4 Claimed 3 Returned 2 Failed / rejected 2 Tracker Reporting
DN queue2 to send
Claim queue2 ready
Dead-letter0
Void risk (150d+)3
3 selected Batch ops audited per row (actor + reason); re-process re-runs the gate chain, never auto-passes.
New scripts 5
Margaret Thompson3 items · EPS acute9A3F2EDownloaded 09:42
John Okafor1 item · eRD 2/69D45A1RTEC ✓
Priya Patel5 items · urgent7F0C19RTEC pending
Failed / rejected 2
Marcus WebbDN failed — attempt 3 of 85B71D2OperationOutcome · transient
Leon MurphyClaim rejected — SSP ref format3A92E7Claim · invalid endorsement

DNs and claims send automatically (DN per supply event at handout; claim sweep after gateClaim() passes — SM-6). The actions here are the manual/exception controls: send-now, re-send failed, withdraw DN, amend claim, return to Spine, per-row View FHIR/XML source, and a multi-select batch clear/re-process over selected rows (ProScript F3/F4/F7/F8 equivalents + G2.1 batch parity — AC-40).

FP10PCD — monthly NHSBSA submission statusRead-only · owned by claims-finance
PeriodFP10PCD formsSubmissionEvidenceReminder
June 2026 current7 contributed so farOpen — submit by 05 Julaccumulatingdue in 21d
May 202611Submitted 04 Junbatch ref NB-PCD-0524
April 20269Submitted 03 Maybatch ref NB-PCD-0423

Dispensing contributes but never owns the tracker — the submitted state, evidence and reminder are written on the claims-finance side (PCD-2).

eRD management
John Okafor — issue 3/6due 26 JunScheduled
Mary Quinn — issue 6/6final issueReview
D. Lloyd — prescriber cancelled issue 4Cancelled
Nominations
Nominated patients1,204
Nomination changes this week+9 / −3
One-off nominations pending2

No-steering rule: nomination is always the patient's choice — capture evidence on change.

Prescription trackerEPS Prescription Tracker FHIR — support tool
NHS number
Prescription ID (short form)
 
Result — Susan Bell · 2 prescriptions found on Spine
9A11FFIssued 10 JunDr Mehta, Park RoadWith dispenser — Timperley
8C03ADIssued 28 MayDr Mehta, Park RoadClaimed

“Patient says the GP sent it” workflow — shows where the script actually is (signed but not downloaded / with another dispenser / cancelled). Every trace is audited with care context.

ETP reportingEPS message + lifecycle analytics · Timperley · June 2026
Downloaded1,482
Dispensed1,395
DNs sent1,407
Claims sent1,311
Returned21
Exceptions needing action
ClassCount
Undispensed >150 days (void risk)3est. £74 lost if voided
DN failed — retrying1attempt 3 of 8
Claim rejected (OperationOutcome)2SSP ref format
Dead-lettered messages (24h)0alarm-clear
RTEC & exemption status (month to date)
OutcomeCount
RTEC confirmed exempt912maternity/medical/PPC/LIS/UC…
Age exempt (DOB-derived, no call)288never declared
No match → declaration captured96evidence retained for claim
Charges collected74£732.60 via EPOS/PMR
Unresolved — blocking claims3CHARGE_RESOLVED gate → claims board
RTEC unavailable → fallback2declaration path, never blocked handout
Message volumes (last 14 days)
Release storm pattern 09:00–11:00 · peak Thursday · Sundays minimal
Lifecycle funnel — month to date
Downloaded
1,482
Dispensed (all items final)
1,395
Collected / delivered
1,352
Claimed
1,311
Owings & split plans7 owings open · 2 split plans · ETA data from StockIQ (as of 09:44)
Patient waiting 1
Priya PatelMethylphenidate 10mg ×28 owedOwingOn order — ETA Thu (conf 09:14)
Arriving 3
Susan BellWarfarin 3mg ×28 (14 owed)OwingAAH — tomorrow
Leon MurphySalbutamol inhaler ×1OwingArrived — collect from tote 3
Split-dispensing plans 2 · in-stock, planned schedule (not owings)
Eleanor WrightQuetiapine 100mg ×112 — 4 splits × ×28 (clinical, weekly review)Split plan 2/4Next split due 21 Jun · DN per split
Tom Mills (staff Rx)Pregabalin 75mg ×84 — 3 splits × ×28Sch 3 CD · split plan 1/3 CD 28-day guard — splits 2 & 3 must fall ≤ 09 Jul
Open 3
D. LloydSch 3 CD — buprenorphine patchOwingDay 26 of 28 — auto-expires day 28

Sch 2/3 CD owing balances and split-plan supplies cannot be supplied after day 28 (SM-7 / SP-2) — auto-expiry creates a patient-notification task. A split plan never fires pmr.owing_created and never enters the StockIQ urgent-reorder loop; resolving an owing unblocks the claim.

MDS — cycles & trays
Production boardProfiles (41)Scripts dueCare-home batches
Oakwood Care Home — cycle 16 Jun–13 Jul · 12 residents
Margaret Thompson28-day · 4 trays · morning/lunch/evening/nightAssemblingTM
Harold Jenkins28-day · 4 traysClinical checkAK
Vera Singhmid-cycle change — dose ↑ ramiprilTray regeneration
Community patients 29 profiles
George Adams7-day dosette · collect FridaysReady wk 24

One MDS model only (no parallel schemas) · mid-cycle changes regenerate unchecked trays and flag checked ones · MAR chart prints with each batch · batch-ready emits to delivery + comms.

Instalment dispensing — FP10MDApaper-only workflow · today Fri 12 Jun
Due today 3
C. ReillyMethadone 1mg/ml — 60ml daily · supervisedSch 2Due
T. BarnesBuprenorphine 8mg — dailySch 3Due
M. FosterMethadone 1mg/ml — 45ml · 3-day pickup (Fri)Sch 2Missed yesterday
This week
Mon ✓ · Tue ✓ · Wed ✓ · Thu — 1 missed · Fri 3 due · Sat 2 · Sun closed

Per-instalment collector capture · Sch 2 supplies write the CD register via compliance API · missed instalment requires an action note · claims via the monthly paper FP34C bundle (CM-10).

Paper / private intake Veterinary (POM-V)
Type *
Animal patient *
Responsible owner *
Species / microchip
Veterinary surgeon (RCVS) *
Date on prescription
Items
Veterinary product (dm+d / VMD)QtyDirections
Metacam 1.5mg/ml oral suspension (meloxicam)1 × 100ml1.5ml once daily with food
+ add item…
Veterinary label preview
For animal treatment only · Keep out of the reach and sight of children
Bella (Border Collie) — owner J. Okafor
Metacam 1.5mg/ml oral susp · Give 1.5ml once daily with food
Prescribed by Mr D. Frost MRCVS · Timperley Vets
Supplied 14 Jun 2026 · Timperley Pharmacy, WA15 6QX
Veterinary supply writes the veterinary POM register (compliance, batch-mandatory, owner-keyed, 5-year retention — D-CC1/SM-13). No NHS claim — billed private + VAT 20% via claims-finance vet invoicing.
Private CD (FP10PCD) — type variantSch 3
CD schedule *
28-day window (CD)
FP10DT token
Collector block (required before handout)
Collector type
Collector name + ID seen
Signature on FP10DT Captured at handout
Reg-22 requisition (supply on requisition to pharmacy / practitioner / care home)
Direction
Requisitioner name + profession
Registration / address
Purpose
Product + quantity
Signed requisition form

Requisition particulars hand to the compliance CD register (statutory record, 2-year retention — reg 22/23). The resulting supply references this requisition_id.

Emergency supplies write the POM register via pomRegister.record() (compliance). Private prescriptions never enter the NHS claim path — billed via private invoicing (SM-11). FP10PCD is private CD: CD-register write + 28-day window + collector/FP10DT apply by schedule (PCD-1).
Emergency suppliesPOM register · Timperley · today Fri 14 Jun 14:20
Today's supplies4
Rx-to-follow pending3
Overdue (72h lapsed)2
Resolved (Rx received)11
Today's supplies 4
Margaret ThompsonLevothyroxine 75mcg ×7 (until GP open)Patient requestNo Rx-to-followsupplied 09:10Logged
Susan BellWarfarin 3mg ×3Prescriber request Rx-to-follow by 16 Jun 11:40 · 45h leftsupplied 11:40Awaiting Rx
Priya PatelSalbutamol 100mcg inhaler ×1Patient requestNo Rx-to-followsupplied 13:02Logged
Ahmed HassanPrednisolone 5mg ×6Prescriber request Rx-to-follow by 17 Jun 13:30 · 71h leftsupplied 13:30Awaiting Rx
Rx-to-follow overdue 2
Eleanor WrightLatanoprost eye drops ×1Prescriber request — Dr A. Osei Overdue 9h · due was 14 Jun 05:15supplied 11 Jun
George AdamsTamsulosin 400mcg MR ×7Prescriber request — The Grange Overdue 31h · due was 13 Jun 07:00supplied 10 Jun
Resolved this week 3 of 11 shown
John OkaforMetformin 500mg ×14Prescriber requestRx received 12 Jun — within 72hsupplied 10 JunClosed
Derek ShawAmlodipine 5mg ×7Patient requestInterval check passed — no greater qty than neededsupplied 09 JunClosed

Two statutory bases, two records (ES-3): a patient-request supply captures the nature of the emergency + interval-since-last-supply + statutory-max and has no Rx-to-follow; a prescriber-request supply captures the prescriber undertaking and is overdue-tracked at supplied_at + 72h. Both feed the compliance POM register (emergency_supply_patient / emergency_supply_prescriber); the same overdue surface appears on the compliance inspection dashboard.

Emergency supply — intakePrescriber request
Request basis *
Patient *
Product (dm+d) *
Prescriber-request fields
Prescriber identity *
Quantity supplied
Undertaking received
Rx-to-follow by (auto +72h)
Patient-request fields (hidden for this basis)
Nature of emergency
Interval since last supply
Statutory max quantity

No Rx-to-follow for patient-request supplies — they are not overdue-tracked.

On save: pomRegister.record() writes the matching entry kind to the compliance POM register; the supply is a CD entry too where the product is scheduled. The two bases never collapse to one record (ES-3).
Product choice — Sertraline 50mg (VMP)Margaret Thompson
Available AMPs (dm+d of the prescribed VMP)
AMP — brand / supplierPackTariff basisStock
Sertraline 50mg tablets — Zentiva28Cat M42
Sertraline 50mg tablets — Accord28Cat M6
Lustral 50mg tablets — Viatris (brand)28Cat C0
LASA caution — verify product name
Other products with similar names: Sertraline vs Sildenafil, and Lustral vs Lyrica. Confirm you have the correct product before supply.
records lasa_acknowledged_by · not yet acknowledged
Substitution reason (brand-written only)
Drug Tariff reimbursement context (display-only · as of 01 Jun 2026 DT)
Part VIIIA categoryCat M
Reimbursement price (28)£1.07
Broken-bulk thresholdpack ≥ £20 / <1 pack used
Out-of-pocket ruleclaim where > £0.05 OOP
BNF classification4.3.3 SSRIs

Pricing visibility at the counter — informs the choice + broken-bulk / out-of-pocket endorsement decision. Never re-computes reimbursement (claims-finance CM-6).

Binds accuracy check
The chosen AMP (Zentiva 28) sets the GTIN the accuracy scan must resolve to. A scan resolving to a different VMP fails hard and one-tap drafts a LASA/picking near-miss.
Endorsements — Priya Patel5 items 1 item not claimable until evidence
ItemCodeChannelEvidence (typed)Claim state
Salbutamol 100mcg inhalerNCSO autoEPS + paperFrom concession list (Jun 2026) — no manual evidenceClaimable ✓
Phenytoin 100mg caps ×84SP specialEPS + paper
Not claimable — evidence missing
Methylphenidate 10mg ×28BBEPS + paper
Claimable ✓
Specialist emollient 500gXPEPS + paper
Claimable ✓
Co-codamol 30/500 ×30PC paper-onlyPaper onlyLinks prescriber-contact record (illegible qty → confirmed) — see Contact prescriberPaper bundle (no EPS claim)
Add endorsement code
Code
Applies to item

Channel applicability is denormalised from the registry: eps / paper / both. PC/PNC force paper_only and link a prescriber_contact_id.

Binds the accuracy check
Endorsement codes and the chosen AMP (from product choice) travel together on the claim. The endorsed quantity reads qty_supplied_rounded (OPD-aware), not quantity_prescribed.
FHIR / XML source — Margaret Thompson9A3F2E-X81004-44C7Z1Spine prescription-order
prescription-order (in)dispense-notification (out)claim (out)OperationOutcome
Message envelope
Message typePORX_IN020101UK31 / FHIR Bundle
Bundle.id7f3a2c9e-1b44-4d20-9a01-44c7z1
MessageHeader.eventprescription-order
Received12 Jun 2026 09:42:11 (correlation 7f3a…)
SignatureXML-DSig valid · Dr R. Mehta
Nominated dispenserFA123 — Timperley (ODS)
Raw payload (stored copy · hash 9c1f…ab02)
<Bundle xmlns="http://hl7.org/fhir"> <type value="message"/> <entry> <resource><MessageHeader> <eventCoding><code value="prescription-order"/></eventCoding> </MessageHeader></resource> </entry> <entry><resource><MedicationRequest> <medicationCodeableConcept> <coding><system value="…/dmd"/> <code value="319773006"/> <display value="Amlodipine 5mg tablets"/> </coding></medicationCodeableConcept> <dispenseRequest><quantity><value value="28"/> </quantity></dispenseRequest> </MedicationRequest></resource></entry> </Bundle>

FHIR Dispensing API payloads (prescription-order · dispense-notification · reimbursement claim · OperationOutcome) are retained per the EPS message-retention policy. Reachable per-row from the EPS console View FHIR/XML action (AC-40).

Same-day supply interrupt Requires acknowledgement
Patient has already received this item today
Prior same-day supplies (1)
TimeItem (dm+d / chosen AMP)QtyBasisSupplied by
09:10Levothyroxine 75microgram tablets — Almus7Emergency — patient requestT. Mills
This guard is distinct from & complementary to the CDS duplicate-therapy screen on the clinical check (same-class duplication across different products). Both can fire on one dispense; neither suppresses the other (SDS-3).
Reason to proceed *
Note (optional)

The acknowledgement is audited: operator + reason + the referenced prior supply event (SDS-2). For a Sch 2/3 CD this prompt additionally surfaces the 28-day CD-window context (SM-7).

Contact prescriber — Susan BellCo-codamol 30/500 ×30
Contact details
Reason for contact *
Prescriber *
Method *
Date / time
Contacted by
Spoke with
Outcome *
What changed / detail
Resulting endorsement
Confirmed/amended → drivesPC — prescriber contacted
No-response & supply under judgement → drivesPNC

PC/PNC are paper-only (paper_only = true) — accepted via the claims-finance paper-bundle gate (CM-10), never an EPS Claim (PCN-2). A confirmed_as_written with no change still records the contact as the resolving evidence (PCN-3).

Links to
Drives the endorsement
On save, the endorsement carries this record's prescriber_contact_id and disp.prescriber_contacted is emitted. The record is the evidence behind the PC/PNC code.
Record measurement — Susan BellSelf-reported · at counter
Measurement
Type
Taken
Systolic (mmHg)
Diastolic (mmHg)
Height (cm)
Weight (kg)
BMI (derived)
Context
Note
Derived BMI
71.0 kg ÷ (1.62 m)² = 27.1 kg/m² Overweight range
May trigger a service
A BP reading at the counter may offer a hypertension case-finding / clinical-monitoring service — that downstream logic is clinical-services'. Dispensing only records the capture event (§9.1) and links the returned clin_observations reference (IC-3).
Boundary: a counselling/intervention note from the clinical check stays in dispensing (not double-recorded in clin_interventions) — only a service-significant intervention routes to clinical-services (IC-2 / OQ-14).
Split-dispensing plan — Eleanor WrightQuetiapine 100mg ×112Split 2 of 4
Splits planned4 × ×28
Supplied1 of 4
Prescribed total112
Next split due21 Jun
Per-split schedule
SplitQtyPlanned dateSupply eventDNStatus
1 of 42807 JunSE-7741SentSupplied
2 of 42821 JunDue next
3 of 42805 JulScheduled
4 of 42819 JulScheduled
Σ split quantities (4 × 28 = 112) = quantity_prescribed. Each split produces its own supply event + DN at supply time; this is distinct on the board from an owing and from an FP10MDA instalment schedule (SP-3).
Create a split plan
Item (in stock)
Number of splits
Reason
CD 28-day guard (Sch 2/3)
For a Sch 2/3 CD, every split is bounded by the prescription's 28-day window (SM-7) — a split planned or supplied after day 28 is blocked at plan time and at supply time (SP-2). This Quetiapine plan is not a CD, so the guard is informational here; the Tom Mills pregabalin (Sch 3) plan shows the live block.
Recall — patients supplied a batchRead-only result surface
Product (dm+d)
Batch
Supply window
Patients supplied — 4 matches (2 batch-confirmed, 2 batch-unknown)
PatientSuppliedBatch on recordMatchNotify
Susan Bell · NHS 943 476 591912 Mar 2026DX2207BBatch confirmedContact required
John Okafor · NHS 612 338 479028 Apr 2026DX2207BBatch confirmedContact required
Ahmed Hassan05 Feb 2026not captured at supply Batch unknownPrecautionary
Margaret Thompson Oakwood19 Mar 2026not captured at supply Batch unknownPrecautionary

This surface is read-only — the contact-action that blocks recall completion lives on the compliance recall screen (it consumes these matches). Batch-unknown rows cannot be excluded; they are flagged for precautionary notification (D-CC3).

Robot Output — assembly step WWKS2Designed / Planned · OQ-21
Reserve → dispense → provenance
StepState
1. Reserve prescribed product from robotReserved (chosen AMP — Zentiva 28)
2. Robot dispenses pack(s)Output complete
3. Pack provenance → supply eventassembly_source = robot · robot_dispense_ref RB-88421
Returned pack data (GTIN · batch L2406A · expiry 03/2028 · pack_serial) flows into disp_supply_event_items. The robot is an assembler, not a substitute for the statutory accuracy check (RB-2).
Still passes accuracy check
The GTIN/batch the robot returns is verified against the chosen AMP exactly as a manual pick. A reservation that cannot be fulfilled (out of robot stock) falls back to manual assembly or an owing — never a silent pass.
CD hub-routing guard
A Sch 1–3 CD line is refused robot/hub routing (never crosses entity hub — HS-4 / RB-3). The MDS auto-filler (§2.7) is a distinct machine, not this single-pack WWKS2 robot.
Patients
Search (name · maiden/old alias · DOB · NHS no · postcode · tag · care home)
Operational status (§2.7 · defaults to Active)
Other filter
Group by
Showing Active only · operational status is orthogonal to PDS-trace status and to deceased — none substitutes for another (INV-14). Deceased patients stay blocked regardless of operational status.
Oakwood Care Home grouped view · 2 of 12 residents match
Margaret Thompson14 Mar 1948 · 485 777 3456PDS ✓Large printMDSActivetoday
Harold Jenkins09 Sep 1939 · 401 223 8851PDS ✓ CovertActive2 Jun
Other patients order as returned · no matching level (INV-7)
Robert Thomson02 Jul 1961 · 625 339 1180PDS ✓Active3 Jun
Ann Thomas29 Jan 1990 · NHS unverifiedunverified SafeguardingActive28 May
Daniel Pryce12 May 1997 · 943 476 5919 Provisional — auto-created from EPSeps_auto · pending_verificationActivetoday
Bella (owner: John Okafor)~6 yrs est. · no NHS Animal · POM-VActive14 May
Claire Donnelly03 Sep 1982 · 943 476 5919PDS ✓Activeopening this record runs an access check
Three orthogonal "is this record live?" axes never conflated: operational status (Active default / Inactive / Moved away / Archived / Do-not-serve, §2.7) · PDS-trace status (verified / unverified / pending / trace-no-match / superseded) · deceased (clinical/legal, always-blocking). eps_auto records badge provisional until the nightly sweep traces them; do_not_serve shows an unmissable banner + reason at open but does not itself block dispensing.

Record views are audited with care context · safeguarding/AIS pills render with forced visibility everywhere the patient appears · PDS "no match" results render in PDS order with no matching level shown.

Register new patient PDS-firstStep 1 — trace & create · Step 2 — enrich the record
Human (PDS trace)Animal (POM-V — owner-keyed, no PDS)
Step 1 · Trace on PDS — creates a verified record CIS2 step-up active
NHS number
or Last name + DOB
 
PDS result — 1 match order as returned by PDS · no matching level shown (INV-7)
Daniel Pryce12 May 1997 · Male · 8 Mill Court, Timperley WA15 7JD PDS verified
Create from PDS auto-fills usual name + name uses · DOB · gender · primary home address · registered GP (ODS) · EPS nominations (read model) · sensitivity flag · NHS-number status — all PDS-mastered and read-only locally. registration_source = pds_trace.
Step 2 preview — complete the record (captured next, on the edit surface)

Local-only fields ScriptIQ captures after the PDS demographics land. None of these come from PDS — they are the PMR's authoritative record.

Exemptions & charges
type · cert no. · valid-to · evidence · RTEC
Allergies & sensitivities
allergen · severity · source · verified
Clinical alerts & AIS
safeguarding · high-risk med · comms needs · RADF
Characteristics & flags
large print · addict · housebound · lock PMR
Carers / related persons
carer · collection delegate · CD recipient
Care home & MAR
home · wing · room · dose rounds · eMAR
Delivery preferences
round · safe-place consent · driver
Comms preferences
per-purpose channels · contact times
Services, MDS & consents
NMS/DMS/Flu · blister consent · ledger · documents
A skeleton record is created from PDS; you complete the rest on the edit surface.
Fallback — create unverified (paper-only / PDS down) Stub — queues for nightly PDS re-verify

Use only when PDS is unavailable or the patient cannot be traced. Captures the minimum to hang a script off; demographics stay incomplete until the trace completes.

First name *
Last name *
DOB *
Lands nhs_number_status = unverified_manual, pds_sync_state = pending_verification; visibly badged provisional and queued for the nightly PDS re-verification sweep (and completed on next interactive open). NHS-number-dependent flows (EPS nomination view, RTEC exemption check) stay disabled until verified. registration_source = walk_in.
Every registration is view- and write-audited (actor · timestamp · branch).
Margaret ThompsonPDS ✓Age exempt Large print Oakwood Owes £8.85

PDS demographics last synced today 06:12 · née Hartley · operational status Active · DOB exact (PDS-traced).

OverviewMedicationsAllergiesConditionsPrescribersServicesCommsNotesDocumentsConsentBalancePDS syncGP record / SCR
Demographics
DOB / age14 Mar 1948 · 78
NHS number485 777 3456 (Modulus-11 ✓, PDS-verified)
AddressOakwood Care Home, 4 Elm Grove, Timperley WA15 6QX
GPPark Road Surgery (A81021) — Dr R. Mehta
NominationThis pharmacy (FA512) since 2019 · history kept
Current medicationDerived from dispensing
Amlodipine 5mg tabletsonce dailylast 14 May
Atorvastatin 40mg tabletsat nightlast 14 May
Levothyroxine 75microgram tabletsonce dailylast 14 May
Patient-asserted supplement (not in dispensing history)
Cod liver oil 1000mg capsulesonce dailySelf-declared OTC
Apixaban 2.5mg tabletstwice dailyHospital-initiated

Supplement is patient-asserted only (pat_current_meds); the authoritative view is the dispensing-derived list above.

Conditions (coded — feeds CDS)
HypothyroidismSNOMED 40930008Active
Essential hypertensionSNOMED 59621000Active
Atrial fibrillationfree-text Not machine-screened
Absence of rows is not "no conditions" — CDS treats an empty list as not screened (fail-closed). Uncoded free-text rows render not machine-screened and are excluded from automated gating. Empty-state copy when none recorded: "Conditions not recorded — not screened".
Alerts & needs (forced visibility)
AIS — large print
All patient-facing material in ≥16pt; flag travels to labels, comms and the delivery manifest.
Care home resident
Oakwood — 28-day MDS cycle, round Tuesday.
Allergies
No drug allergies recorded (end-dated entries retained)
Exemption
Age exemption (78)Auto — DOB derived
No RTEC call needed; never declared.
Prescribers (roll-up)
Dr R. Mehta
Park Road Surgery · GMC 6041122
Registered GP12 May
Dr H. Osei
Cardiology, Wythenshawe · GMC 7188340
Consultant28 Apr
GtD OOH
Mastercall OOH · spurious G9999998
OOH11 Mar
Dr S. Cole
The Spire, Manchester · GMC 6620451
Private02 Feb

Patient-level roll-up (pat_prescribers); dispensing upserts last_prescribed_at on script receipt. Distinct from the PDS-sourced registered GP (read-only, above) and from the per-script prescriber on the prescription.

Pregnancy / breastfeeding
Status Unknown — not screened
Default unknown reads as not screened to CDS (fail-closed) — never "not pregnant". EDD / review surface only once a status is recorded; feeds the valproate/teratogen PPP gate.
Balance — Margaret Thompson Owes £8.85
Current balance£8.85
Oldest open14 May 2026
Last line14 May · charge
DateDirectionReasonSourceAmountStatus
14 May 2026ChargeRx charge — Apixaban (1 item)dispensing · ref d4f1…+£9.90Open owing
14 May 2026PaymentCounter — carddispensing · ref d4f1…−£9.90Settled
06 May 2026ChargeOwing — collected, pay laterdispensing · ref c12a…+£9.90Open owing
02 May 2026AdjustmentGoodwill — short-dated stockpatients · Aisha Khan (mgr)−£1.05Applied
28 Apr 2026Write-offvoidedWrite-off (entered in error)patients · voided 28 Apr+£0.00Voided

Append-only ledger (pat_balance_lines): corrections are a new offsetting line or a void — never an in-place edit. balance_minor always equals the signed sum of non-voided lines; a recalc job alarms on drift, never silent-corrects. adjustment/write_off are manager-gated; charge/payment originate from dispensing only. Drives the comms owing-arrival prompt and the debtor-ageing report.

Bella — Labrador (owner: John Okafor) Animal — POM-VNo NHS / no PDS Owes £42.60
OverviewAllergiesDocumentsNotesBalance
Animal
NameBella
Species / breedDog · Labrador Retriever
SexFemale · neutered
Age / DOB~6 yrs est. (approx — no exact DOB)
Microchip985 1410 0072 4419
InsurancePetplan · ref PP-88241
Owner (responsible person)animal_owner
NameJohn Okafor
Address17 Brackley Road, Timperley WA15 7LN
Mobile07700 900614 SMS
Emailj.okafor@example.co.uk

comms isContactable() and delivery resolve the owner, not the animal. Mandatory single owner_related_person_id (INV-10).

Suppressed national-service surfaces
NHS numberNot applicable
PDS synclocal_only — never traced
EPS nominationHidden — paper/local Rx
Charge exemptionN/A — private + VAT
Writing an NHS number, a PDS state other than local_only, a nomination row or a pat_exemptions row to an animal record is API-rejected. Excluded from the nightly PDS re-verify sweep (active-population query filters patient_kind='human').
Allergies / sensitivities (species-appropriate)
No known drug allergies asserted — Tom Mills, 14 May 2026

Allergy model still applies (no SCR/NCRS source for animals). Absence of rows is not "no allergies".

Vet balance (owner)
Outstanding Owes £42.60
Last line: vet_invoice £42.60 (Apoquel 16mg × 30) · billed to owner. Charge-capture posts a vet_invoice/private_supply balance line — never an NHS-charge/exemption decision.
Edit patient — Margaret Thompson PDS verified Synced 02:14 today
DemographicsContact & commsExemptionsAllergiesAlerts & AISCharacteristicsCarersCare homeDeliveryNotesServices & MDSConsentsDocuments
Demographics — PDS-mastered except where marked local
Title
Preferred / known-as name (local · pat_name_aliases nickname)
First name *
Middle name
Last name *
Former / maiden name (local · feeds search + merge)
Date of birth *
NHS number (PDS-mastered)
Gender (stated · PDS)
Sex at birth (local · clinical · never inferred)
Ethnicity (local · NHS DD category)
Preferred language
Primary home address (PAF lookup · only PDS-pushable address)
Registered GP practice (ODS · PDS-sourced · read-only)
Add a temporary or correspondence address — local-only, never pushed to PDS (read by delivery / comms).
Contact & communications — pat_telecom · pat_communication_prefs
Mobile (SMS target · rank 1)
Landline
Email
Per-purpose channel matrix (comms resolves the cascade from these)
PurposeSMSEmailPhoneLetterNHS AppNone
Ready for collection
Owing arrival
Service reminder
Delivery notice
Marketing (needs marketing consent)
Preferred contact times
Interpreter needed
Exemptions & charges — pat_exemptions
Exemption type
Certificate number
Valid to
Evidence
Status
Age-exempt (DOB-derived)
RTEC
No RTEC call needed
Age exemption is derived from DOB, never stored as a row. For PPC/MedEx/UC etc. a Verified via RTEC pill appears once the dispensing-flow RTEC check confirms; expiry warns 28 days before valid_to.
Allergies & sensitivities — pat_allergies · absence ≠ no allergies
AllergenTypeReactionSeveritySourceVerified
PenicillinAllergyUrticarial rashModerateGP record Aisha Khan
CodeineIntoleranceNausea / drowsinessMildPatient-reportedUnverified
Explicit assertion held: NKDA otherwise asserted — Aisha Khan, 12 May 2026. Severity scale: mild / moderate / severe / life-threatening. Source: patient-reported / SCR (NCRS) / GP / discharge / pharmacist.
Clinical alerts & accessible information (AIS — DAPB1605) — pat_alert_flags · forced-visibility
Communication needs Reasonable adjustment
AIS information / communication needs
Large print (≥16pt)
Reasonable Adjustment Digital Flag (RADF): not yet linked (national RA-flag interplay reserved — OQ-7). Local reasonable_adjustment flag is the PMR-owned accommodation today. Active flags render wherever patient context renders.
Characteristics & dispensing flags — pat_characteristics · drives label / dispensing behaviour

Large print / Both labels reach the label engine; Addict / Frequent dispensing change the instalment-supply flow; Housebound feeds delivery. (ProScript-parity: Profile & Characteristics.)

Related persons / carers — pat_related_persons
NameRelationshipRolesID verified
Karen ThompsonDaughterCarer Emergency contact Collection delegate Verified
Oakwood — Sister J. OwusuNurse-in-chargeMAR contact CD authorised recipient Verified

CD authorised-recipient rows (ID-verification mandatory) feed delivery's PoD authorised-recipient ladder.

Care home — pat_care_home_residents
Resident of
Wing / round
Room
Nurse-in-charge
Dose-round times
eMAR partner
MAR chart: cassette-first · warnings on chart 28-day cycle Self-administers: No Covert: No
Delivery preferences — pat_delivery_prefs · ties to delivery module
Delivery enabled
Round
Round days
Safe-place consent type
Consent detail
Consent date
Default driver

Delivery's evidence ladder permits safe-place only where this authorisation exists; never for CD or fridge lines.

EPS nomination — pat_nominations · PDS-mastered (read model)
SlotNominated dispenserRead from PDS
P1 — Community pharmacyAllied Pharmacy Timperley (FA512)02:14 today
P2 — Appliance contractorNone set02:14 today

Nominations are PDS-mastered and read-only here — set via the nomination process, not edited locally (OQ-1).

Notes — pat_notes · typed (ProScript parity)
CategoryNoteAuthor
Force-warningPenicillin allergy — confirm every antibiotic with pharmacist before supply.Aisha Khan
Bag-labelDeliver to Oakwood nurse station — do not hand to resident.Tom Mills
DeliveryRing office bell at side entrance; gate code 2480.Sam Doyle
GeneralFamily prefer all comms via daughter Karen.Tom Mills

Bag-label prints on every dispensing bag · Delivery is a driver instruction · Force-warning interrupts on record open.

Services & MDS — pat_mds_suitability · enrolled services
MDS suitability
Device type
Blister-pack consent
Recorded (written)
Enrolled services & flags
NMSDMSFluBP checkContraceptionRMSCollection
Consents — pat_consents · append-only ledger
PurposeStatusMethodCaptured
MDS compliance aidGrantedWritten03 Feb 2026 · Karen Thompson (POA)
Care-home eMAR sharingGrantedWritten03 Feb 2026
Marketing commsWithdrawnVerbal11 Apr 2026
Call recordingGrantedVerbal03 Feb 2026
Photo captureNot asked
Patient app termsNot asked

No consent row is ever a precondition of dispensing or direct care (lawful basis is Art 6(1)(e)+9(2)(h)).

Documents — pat_documents · virus-scan gated
DocumentTypeUploadedStatus
MDS written consent.pdfConsent form03 Feb 2026 · Tom MillsClean
Care plan — Oakwood.pdfCare plan03 Feb 2026Clean
Daughter ID (POA).jpgPhoto ID03 Feb 2026Clean

Audit: every field change is recorded with actor + before/after. NHS number is read-only (Modulus-11 validated, PDS-verified). Deceased marker blocks dispensing at API level; soft-delete only via the governed GDPR workflow, never row deletion.

PDS sync — Margaret Thompson synced
NHS number statusVerified
Sync statesynced
Last syncedtoday 06:12
Coverage lag1 night
WhenTriggerResultChanges
Today 06:12Nightly sweepTracednone
10 Jun 14:03Pre-comms checkTracednone
14 May 09:55On dispenseChangedaddress updated (care home admission)
PDS sync-state legend — pds_sync_state · nhs_number_status (§8.1 / §2.7)
StateMeaningBehaviour
syncedTraced and current against PDSFull national-service surfaces enabled; deltas applied ETag-based
pending_verificationProvisional record (walk-in stub / eps_auto) not yet tracedBadged provisional; NHS-no-dependent flows (EPS view, RTEC) disabled until traced
trace_no_matchPDS returned no match for the demographicsRecord usable; re-traced every night; never an invisible fallback (§8.1)
decoupledPDS returned a superseded NHS number (INV-4)Flagged "wrongly identified"; must not push updates to PDS; guided re-trace + merge required
local_onlyAnimal patient — never enters PDS sync (§2.5)Permanent; excluded from the nightly sweep
Guided re-trace & merge decoupled
Old (superseded) number625 339 1180 retired by PDS
PDS-supplied replacement727 884 2013 awaiting confirmed trace
DetectedToday 06:12 · nightly sweep · pat.pds_reverify_exceptions
A duplicate-review task is auto-created so the two diverging records resolve into one (§2.3).
Other non-synced states (worked examples)
PatientStateOrigin
Daniel Prycepending_verificationeps_auto — inbound EPS for an unknown NHS number; provisional record auto-created
Ann Thomastrace_no_matchManual registration, PDS returned no match; re-traced nightly
Sync policy (§8.1, normative). Coverage is prioritised and rolling, not all-active-nightly: pending_verification/trace_no_match re-verify every night; the active population (activity in last 90 days) re-verifies on a rolling cadence ordered by staleness, sized so every active patient is re-verified at least every 7 nights, with per-tenant batch caps keeping the estate-wide rate inside the contracted PDS app-restricted quota. Cadence slipping past 7 nights is itself an exception (coverage lag is reported honestly, never hidden — OPEN QUESTION 11). Deceased flag from PDS hard-blocks dispensing and opens an exception task · ETag-based, only deltas applied.
Care homes
HomeResidentsMDS cycleRound dayContact
Oakwood Care Home1228-dayTuesdayMrs P. Adler · 0161 980 4412Cycle in prep
Riverside Lodge828-dayThursdayJ. ColemanOK
Oakwood Care HomeNursing4 Elm Grove, Timperley · CQC 1-2345678 · serving branch: Timperley
Residents12
MDS enrolled10
Wings2
Next roundTue 17 Jun
MAR / eMAR configuration (home-level · ProScript-parity)
Round times
08:00 · 12:00 · 18:00 · 22:00
MAR template
A4 · 28-day · 18 lines/sheet · backing-sheet on
Cycle anchor
28-day · Tuesday round
Picking list
Per-wing · blank-rows on
eMAR partner
Camascope sharing consent on file
GP practice
Park Road Surgery (A81021)

MAR-chart config lives here (pat_care_homes); the chart content is generated by dispensing. care_home_emar_sharing consent gates the eMAR feed.

Yellow Week rounds 08:00 / 18:00 · 6 residents
Margaret ThompsonRoom 14 · MDS 28-day · 4 trays08:00 / 18:00Large printResident
Harold JenkinsRoom 3 · MDS 28-day · 4 trays08:00 / 18:00 Covertauth COV-2241 · review 30 JulResident
Vera SinghRoom 9 · MDS 28-day · 4 trays08:00 / 18:00 Crushauth CR-1180 (unlicensed)Recent dose changeResident
Blue Week Blister rounds 08:00 / 12:00 / 18:00 / 22:00 · 6 residents
Arthur WebbRoom 21 · MDS 28-day · 4 trays08:00 / 12:00 / 18:00 / 22:00Resident
Dorothy LaneRoom 18 · original packs Self-administersassessment SA-0907 · excluded from MAR round & pickingResident
Stanley FrostRoom 22 · MDS 28-day08:00 / 22:00 Hospital stay

One open (resident) residency per patient · wing must be one of the home's defined wings · status & wing/dose-round/self-admin/covert/crush changes emit pat.care_home_resident_changed (dispensing re-plans MDS + regenerates MAR annotations; delivery re-plans per-wing rounds).

Duplicate review 1 NHS collision3 similarity candidatesmanager / superintendent · forced re-auth on merge
NHS-number collision — auto-task (INV-1) two records share one NHS number — a defect state
943 476 5919Susan Bell vs Susan A. Bellboth badge "possible duplicate" until resolved · warfarin patient
Demographic / maiden-name similarity
score 0.92Robert Thomson vs Rob Thomsonsame DOB 02 Jul 1961 · former-surname collision (Thomson née Thompson) · NHS vs paper-only
score 0.74Eleanor Wright vs Ellie Wrightnickname alias hit · estimated DOB on one side (~1952) est-DOB widened the window — flagged
Multiple-birth — foregrounded as likely-distinct (§9.4) canonical wrong-patient hazard — never auto-suggest a merge
twinAisha Khan & Amira Khansame address · same DOB 18 Aug 2014 · birth-order 1 / 2 · distinguishing fields foregrounded Likely distinct — no merge offered

Merge is elevated-permission and fully audited; the losing row survives with merged_into_id + redirect (pat_merges). A "Not a duplicate" decision is also recorded (duplicate decisions are audited).

Merge preview — Robert Thomsoncandidate score 0.92 manager / superintendent
Field-level diff — choose the surviving value per field
FieldKeep — Robert Thomson (NHS, 41 dispensings)Merge away — Rob Thomson (paper, 2 dispensings)Take
NHS number625 339 1180 PDS ✓Keep
DOB02 Jul 1961 exact02 Jul 1961 exactIdentical
Usual nameRobert ThomsonRob Thomson
Former / maidenThompson (old)Both retained
Address14 Brook St, Timperley WA15 7QP14 Brook Street, Timperley
Mobile07700 90011807700 900550 newer
Registered GPPark Road Surgery (A81021)noneKeep
Allergies / flags / consentsPenicillin allergy · 2 consentsNKDA assertedRe-pointed, provenance preserved

Allergy / flag / consent rows are re-pointed to the winner with their original provenance intact — never overwritten or dropped.

Dependent-object census — counted live through each module's public API All modules responded
ModuleKeepMerge awayAfter mergeTreatment
Dispensing — prescriptions41243Original UUID retained; resolves via redirect
Clinical services303Re-pointed
Claims / owings£0.00£9.90 open£9.90Balance lines re-pointed (append-only)
Documents415Re-pointed
Comms history22123Re-pointed
Compliance — CD / POM register202Carve-out — never rewritten
Statutory register entries keep their original patient UUID (reg 20 no-alteration) and resolve through the tombstone redirect — they are counted but not re-pointed. A failed census on any module aborts the merge.
Reason for merge *
Performed as
Pre-merge snapshots of both records are stored in pat_merges for reversibility evidence; pat.patient_merged is emitted so consuming modules re-point caches/boards.
Confirm your identity to merge Forced re-authentication
Re-authenticate
Signed in as
Password *
Authenticator code *

On success the merge executes, the loser is tombstoned (merged_into_id), a merge_audit_id is returned and recorded with this re-auth event id.

What you are authorising
Keep (winner)Robert Thomson · 625 339 1180
Tombstone (loser)Rob Thomson · paper-only
Records re-pointed76 across 5 modules
Carve-out (not rewritten)2 statutory register entries
ReversibleSupervised manual only (IG-governed)
There is no automatic un-merge.
Snapshots in pat_merges allow a supervised reconstruction; attempting it is an IG-governed operation.

Merge and GDPR actions are refused offline with explicit messaging (online-only, governed). The merge is blocked if the dependent-object census could not complete or if re-auth fails — both audited.

GDPR requests superintendent / IG
Open requests3
Due ≤ 7 days1
Awaiting approval1
Executing1
PatientTypeReceivedDue (1 month + ext)StateHandler
Ann ThomasSAR2 Jun2 Julscoped → approvalIG lead
(former patient — Mary Lomax)Erasure28 May27 Junexecuting (3/6 modules)IG lead
Thomas RidleyRectification11 Jun11 Julidentity_verifiedManager
Erasure honours statutory retention minimums — clinical/statutory carve-out records are retained unmodified and restricted; only erasable classes are deleted/anonymised; the patient row reduces to a pseudonymised tombstone (pat.gdpr_erasure_executed purges non-statutory caches estate-wide). Never a raw DELETE. SAR export is signed-URL, watermarked and superintendent-gated.
Erasure request — Mary Lomax (former patient) Article 17executingReceived 28 May · due 27 Jun
Erasure state machine — pat_gdpr_requests (§2.4)
received identity_verified scoped approval executing completed

A rejected terminal branch (with reason letter) is also reachable from approval. Each transition is audited (actor, role, timestamp, is_remote).

Identity verification
SubjectMary Lomax · DOB 04 Apr 1959 · former NHS 612 003 4471
VerificationSAR-grade — passport + proof of address seen Recorded
Verified byTom Mills (Manager) · 29 May 2026
Scope classification — each module's gdprScope() · erasable vs statutory carve-out
ClassDataTreatment
ErasableMarketing consents · comms history beyond need · tags · non-clinical notes · photo · communication prefs · duplicate-detection artefacts · household links · current-meds supplement · MDS suitability/consent · name aliases · non-PDS telecom/addressesDeleted / irreversibly anonymised
Carve-out — retainCD-register entries · POM register · RP log · dispensing/supply + EPS evidence (in period) · claim/endorsement evidence · clinical-service records (8y / 25th-birthday) · incident recordsRetained unmodified, restricted — patient link not rewritten (reg 20)
Clinical (per-row)Coded conditions · pregnancy status · prescribers — where part of the dispensing/clinical-safety recordgdprScope() decides per-row
TombstoneThe pat_patients row itselfPseudonymised — UUID + minimal flags kept; demographics nulled

Carve-out lawful basis: UK GDPR Art 17(3)(b) — legal obligation (statutory retention schedule + NHS RMCoP). Erasure must never delete or alter records the law requires the pharmacy to retain.

Dual approval — superintendent + IG/DPO (§2.4)
SuperintendentAisha Khan Approved 02 Jun
IG / DPOR. Okafor (DPO) Approved 03 Jun
Caldicott reviewNot required (no disclosure-sensitivity)
Both approvals are mandatory before executing; recorded as IG evidence. A Caldicott Guardian review hook fires where disclosure issues arise.
Per-module completion ledger3 / 6 confirmed
ModuleEraseState
patientsaliases · prefs · notes · MDS Confirmed
comms-patientmarketing history Confirmed
claims-financenon-statutory only Confirmed
dispensingcarve-out retained Running
deliveryPoD evidence retainedPending
complianceregisters retainedPending
The workflow never reports complete until every registered contributor confirms (AC-13/14). On a partway failure it halts in executing with this ledger and is resumable — an unregistered module is a CI failure, not a silent gap.
SAR export (this subject also lodged a SAR)
Aggregated ZIP — every module's gdprExport() Watermarked
Issuance is superintendent-gated, watermarked with requester + timestamp, signed-URL, and audited as a disclosure.
Statutory clock: 1 month from receipt (+ extension where complex). Every transition, approval and execution detail is audited.
Clinical servicesTimperley · today
Referrals to triage3
Remote NMS queue5
PINCER cases to review14
Local-commissioned services9 live
Local-commissioner claims£4,118
Commissioning & configuration native consolidation surfaces
Service cataloguemaster service list + native / bridge rollout status (two-gate)29 services
Service buildercommissioner-configurable form/template engine — 10 archetypes (config not code)CC-3 lifecycle
Local services & commissionersTees LPC · PSNE · Middlesbrough Council · ICBG2 onboarding
Practitioner enrolmentper-service accreditation registry — in-form enrolment gate12 enrolled
Commissioner claimsclaim batches to councils / LPC / ICB — distinct from MYS national path2 batches due
Action window closing 2
Daniel PrycePF — sore throat · walk-inPF CPGateway passed
111 referral — L. ChenUTI pathway · received 09:02BaRSRespond by 12:02
Due today 5
Susan BellNMS follow-up call (day 14–21)NMSPhone
Karen DoyleDMS stage 2 — first Rx received post-dischargeDMSVerify changes
M. IqbalHCF — ABPM fit appointment 14:30HCFBooked
Referral inboxBaRS (111/GP) · NHSmail · MESH ToC
ReceivedPatientSourceReasonWindowStatus
09:02L. Chen · 31 ♀111 onlinePF — urinary symptoms2h 18m leftNew
08:44K. Doyle · 67 ♀MESH ToCDMS — discharge from WythenshawetodayAccepted
YesterdayB. Hughes · 24 ♂GPPF — earacheDNA +24h follow-up dueDNA

Action-window timer starts at receipt · DNA triggers a 24 h follow-up task · rejected referrals return to sender with a reason.

Pharmacy First — Daniel Pryce (24 ♂)Acute sore throatContent pack PF v7 (pinned)Pharmacist only
Referral / triageGP recordAssessmentCDSOutcomeSafety-nettingDocuments
1 · Gateway2 · Symptoms3 · Scoring4 · Exclusions5 · Outcome6 · Safety-net
Step 3 — FeverPAIN (banded score with score-gate)
Fever in last 24 h · Absence of cough/coryza · Symptom onset ≤3 days · Purulent tonsils · Severe inflammation4 / 5
Centor score (corroborating instrument)3 / 4
Step 4 — Numeric-lab & paediatric gates
eGFR / renal function gate88 mL/min · self_reported · > cut-off — pheno OK
Paediatric dose calculator (adult — n/a)Patient ≥18 · weight/age dosing not invoked
Media / body-map capture (consent_to_image)
Clinical photo — not required (sore throat)
Red-flag answers (stridor, immunosuppression, quinsy) force an escalation outcome — no override on PGD supply (EP-5); the content pack, not the pharmacist, defines PGD legality. Score-gate & eGFR gate are enforced server-side.
Referral / triage notes & GP record (split panel)
Referral sourceWalk-in — no BaRS triage notes
GP Connect Access Record (CIS2 step-up)consent_to_record_access ✓
Allergies (from GP record)No penicillin allergy recorded
CDS decision support (cds.screen — fail-closed, EP-8)
⚠ Interaction — moderate
Phenoxymethylpenicillin × methotrexate (PMR repeat): monitor. Dataset BNF-int v2026.05
ℹ Counselling
Complete the full 10-day course. Dataset PF-cds v7
Screening result cds_screening_id linked · supply unblocked
Outcome
Outcome *
Phenoxymethylpenicillin 500mg tablets ×40PGD v4 · expires 03/2027
Supplier authorisationA. Khan · GPhC 2061234 · competency ✓ (ST-4)
Delayed-supply window (if selected)collect/start after 3 days · safety-netting mandatory
Label + tokenbatch “PF CP”
Charge£9.90 or exemption (claims-finance)
Safety-netting & intervention
Safety-netting checklist (mandatory) Worsening/duration advice given
Add pharmacist intervention (clin_interventions)
Report adverse reaction (Yellow Card)
Document outputs & completion
→ GP Connect Update Record (day-of / next working day; NHSmail fallback) · clin.episode_completed → claims-finance provisions £17 (MYS, verify by 5th) · counts toward CP fixed-payment band (24 → 30 = £1,000).
New Medicine Servicecap headroom: 31 of 38 (0.9% of items)
Identified 3
P. Whitfieldapixaban — started 11 JunOffer NMS
Engagement 2
R. Salimengaged 9 Jun · intervention window opens 16 JunScheduled
Intervention due 4
Susan Bellwindow 16–23 Jun · phone preferredDue
Follow-up 3
G. Adamsfollow-up complete · outcome: continueClaim-ready £28

Windows computed from the content pack (engagement +7…14d, intervention +14…21d) · out-of-window completion needs an audited reason and flags the claim · declined patients suppress re-identification 3 months.

VaccinationsFlu + COVID joint campaign
Today's clinic14 booked
Flu given (campaign)212
COVID given168
Fees accrued£3,822
TimePatientVaccineSourceStatus
10:30H. Begum · 71Flu (aQIV) + COVIDNBSArrived
10:45T. O'Neill · 66Flu (aQIV)walk-inBooked
Delegated mode — external PoC reconciliation (OQ-1)
PatientPoC refVaccine / batchNIVSReconcile
R. Khanna · 68RAVS-88214Flu aQIV · FL2471AsentMatched
P. Doyle · 73RAVS-88231COVID Comirnaty · CV0931delegated_to_pocNo PMR draw-down — fix

Batch + expiry mandatory at administration · 15-min observation for COVID · GP/NIVS notified day-of/next-day · stock draw-down via pmr.service_supply.

Administer — H. Begum (71 ♀)Flu + COVID co-administrationCampaign pack autumn-2026 (pinned)
1 · Product / brand picker
Flu product *
COVID product family *
Flu batch / expiry *
COVID batch / expiry *
Product check In campaign set · in date
Mismatched or expired product blocks administration (mirrors the device-calibration block).
2 · Pre-screen contraindication checklist (mandatory, no skip)
Acute illness — “well enough today”?Yes — well
COVID — PEG / polysorbate allergy?No
Flu — egg allergy / prior anaphylaxis?No
Anticoagulation / bleeding disorder?Apixaban — fine pressure technique
A red-flag pre-screen answer blocks administration and forces the content-declared outcome (defer / refer) — EP-5 discipline. Responses stored in pre_screen_responses.
3 · Dose-interval / NIVS dose-history (fail-open)
COVID — prior dose history (NIVS read)NIVS unavailable — self-declared used
Self-declared: last COVID Apr 2026Interval > 91 days · dose_interval_ok
Flu — one dose this season?First this season
Where NIVS dose history is unavailable, capture is NOT blocked — “dose history not available — reason” recorded (fail-open-to-manual), self-declared history used (OQ-13).
4 · Co-administration & sites
Flu site / route
COVID site / route
Co-administration group Flu+COVID linked · permitted combo
Performer (trained vaccinator)A. Khan · GPhC 2061234
5 · 15-minute observation & record updates
Observation timer 08:42 / 15:00 remaining
Adverse event during observation?None observed so far
NIVS status
Red book (PCHR) updated
EMVS decommission ref
GP / record notifygp_connect_ur queued

A recorded observation-period reaction offers one-tap Yellow Card (§2.11, YC-1/YC-3) — distinct from LFPSE incident. Fees: flu £10.06 · COVID £8.70 (in-campaign) · stock draw-down pmr.service_supply.

Appointments — Fri 12 Jun
TimePatientServiceModalityWithStatus
10:30H. BegumFlu + COVID vaxIn personA. KhanArrived
11:15Susan BellNMS interventionPhoneA. KhanBooked
14:30M. IqbalHCF — ABPM fitIn personT. MillsConfirmed
15:00B. HughesPF follow-up (DNA rebook)In personA. KhanDNA risk

clin_appointments state machine: requested → booked → confirmed → completed | dna | cancelled · DNA raises the service follow-up task · NBS and portal book through this API.

Content packs & PGDsversioned clinical content — CSO-governed
PackActive versionPGDsSign-offExpiry
Pharmacy First — 7 pathwaysv7 (live 1 Apr 2026)12CSO ✓
Contraception (PCS)v34CSO ✓
PGD — phenoxymethylpenicillinv4Adopted03/2027
PGD — nitrofurantoin (UTI)v2Adopted09/2026
Episodes pin the content version in force (historical records stay interpretable) · expired/withdrawn PGD blocks supply fail-closed (PGD-2) · activation emits clin.content_activated → staff competency invalidation.
Service registrations — Timperley
ServiceMYS registrationPrerequisitesStatus
Pharmacy FirstRegistered (evidence 12 Jan 2026)HCF + PCS bundling ✓Active
NMSRegisteredActive
Hypertension case-findingRegisteredBIHS-validated monitor ✓ · ABPM ×2Active
Smoking cessationsetup fee £1,000 unclaimedNot registered
Autumn vaccination campaignmilestone 31 JulPoC system decision (OQ-1)Pending
EP-2: an episode cannot start without an active registration — fail closed. PF fixed payment requires HCF and PCS registration (bundling rule from 1 Jun 2025).
Pharmacy Firstpathway selector + active episodes
Pathway selector — clinical version resolved by date (PF v7, live 1 Apr 2026)
Clinical pathway (CP) — gateway crossed, claimable 2
Daniel Pryce · 24sore throat · FeverPAIN 4 · walk-inCPGateway passed
L. Chen · 31UTI · nitrofurantoin PGD · 111 onlineCPRespond by 12:02
Minor illness (MI) — referral only, £17, no gateway 1
B. Hughes · 24earache · GP referral · may transition → otitis media CPMIAwaiting assessment
Completed today 4
T. O'Neill · 66impetigo · fusidic acid PGD · exclusion letter issuedCP£17 claim-ready

CP monthly count drives the fixed-payment band (£500 at 20–29 · £1,000 at 30+, bundling: HCF+PCS) · MI/UMS excluded from the band · in-episode strand transition (MI → CP) re-resolves content + claimability (§2.3.5).

PINCER prescribing-safety auditspharmacist-led · cds-owned indicators
Open audits3
Cases to review14
Interventions this quarter22
At-risk reduction31 → 12
Open audits
IndicatorCohortSeverityStatus
PINCER-A · NSAID, no gastroprotection, PU history9HighReviewing
PINCER-C · non-selective β-blocker in asthma3MediumOpen
PINCER-E · methotrexate monitoring gap2HighRe-audit
indicator_version pinned at open (CC-4); re-audit recomputes current_at_risk_count against the same pinned version (PIN-3) — like-for-like improvement.
Cohort worklist — PINCER-A (NSAID / no PPI)
Susan Bell · 72naproxen 500mg + PU history · no PPIHigh · flagged
G. Adams · 64ibuprofen repeat · prior GI bleedUnder review
R. Salim · 58diclofenac · PPI added — GP feedback sentIntervened
K. Doyle · 67on PPI alreadyFalse positive
Case review — Susan Bell (72)
IndicatorPINCER-A · cds_evaluation_ref ✓
Flagged medicineNaproxen 500mg tablets ×56
Risk factorPeptic-ulcer history, no gastroprotection
Triage decision *
Intervention capture (clin_pincer_interventions)
Intervention type
Note
GP feedback (clin_gp_notifications rail — PIN-4)
Baseline vs current improvement
Baseline at-risk (audit open)9
Current at-risk (last re-audit)4
Re-audit against pinned indicator_version (PIN-3)

PIN-1: cohort obtained via cds.evaluateIndicators() (pull, never re-implemented here) · PIN-2: every triage/intervention is an audit event · estate-wide (NULL branch) audits are central-ops-scoped · emits clin.pincer_intervention_recorded → reporting.

Cross-branch remote NMScentral-ops scope
Overdue — unassigned 2
J. Mwangi · 61Altrincham · ramipril · intervention window closed 11 JunEP-4 flagAssign
P. Whitfield · 55Sale · apixaban · due 10 JunOverdue
Due — my assigned 2
Susan Bell · 72Timperley · apixaban · locked to A. Khan Mine
R. Salim · 58Stretford · atorvastatin · follow-up due 16 Jun Mine
Lost-to-follow-up 1
D. Okeke · 49Wythenshawe · 3 contact attempts logged · uncontactablelost — £0 claimed

assignNms locking prevents double-staffing across branches · the cross-branch queue is the same surface central-ops/reporting delegates into (reporting holds no state) · cap headroom warns, never blocks.

Active consultation — Susan Bell (72)
ModalityVideo (live) · Timperley episode
Verbal consent for remote (verbal_for_remote) Captured 11:18
Consent to record call (consent_to_record_call)Declined — no recording, consult continues
Call recording Not recording (consent-gated)
Consultation timer 06:12
Structured NMS follow-up form
Medicine being taken *
Adherence OK?
Side effects
Outcome enum *
Side-effect → Yellow Card hand-off
GP referral (gp_referral_sent — clin_gp_notifications)
Add pharmacist intervention
Terminal actions
Three terminals: Complete · Save & schedule follow-up · lost (lost-to-follow-up — records the attempt log, claims nothing for the missed stage). Distinct from lapsed (window expiry) and dna (no-show).
Service claims & PPV evidenceMay 2026 cycle · Timperley
Provisioned (May)£1,946
Verified / submitted£1,512
Rejections3
Late — IT exception2
PPV value-at-risk (Q1)£289
Month cycle & chase
ServiceCompletedProvisionedStatus
Pharmacy First (CP)24 · £408£408Unverified — chase
NMS (int + f/u)11 · £266£266Submitted
HCF / PCS / DMSmixed£1,272Unverified — chase
Rejections triage (claim.service_claim_rejected)
L. Chen · PF UTIrejected — no gateway anchor on recordTriage
G. Adams · NMSrejected — out-of-window, no audited reasonTriage
H. Begum · Flurejected — duplicate of NBS claimReview
Late-claim IT-failure exception evidence (clin_claim_exceptions)
MESH outage 3–4 May · 4 episodes affectedEvidence attached
Submit windowup to 12 months with IT-failure evidence (CL-2)
Outage incident log + queue dead-letter export
PPV evidence-completeness (clin_rpt_service_evidence · PPV-2)
EpisodeSame-dayObsGP notifyConsent
Daniel Pryce · PF
Gordon Fairley · HCFSLA risk
S. Mensah · HCFmissingnone
Incomplete bundles (missing same-day record / required observation / un-notified GP past SLA) surface as a PPV risk before the quarter closes — exposure visible, never discovered at audit (PPV-2). Evidence immutable once the claim is submitted (CL-8).
Quarter value-at-risk
Q1 claims with incomplete evidence£289 (5 episodes)
15% of sampled-claim value flagged · remediate before quarter close to remove from the PPV evidence pack reporting assembles.
Private service definition — Travel healthprivate_travelDefinition v4 (active)v5 draft
Definition list
ServiceCodeActive versionPrice sourceLifecycle
Travel health consultationprivate_travelv4 (live 1 Mar 2026)Private fee scheduleActive v5 draft
Private flu vaccinationprivate_fluv2Private fee scheduleActive
Ear care (microsuction)private_earcarePrivate fee scheduleDraft
Eligibility rulesConsultation schemaPGD setPrice listDocuments & outputLifecycle / sign-off
Service name *
Service code
Eligibility rules (generic evaluators — CC-5, data not code)
RuleTypeParametersEffect
Minimum ageage range≥ 5 yearsBlock if not met
Departure ≥ lead timedate range≥ 14 days recommended (advisory)Warn
Pregnancy / immunosuppressionboolean treeflag → pharmacist review before live-vaccine PGDFlag
Yellow-fever centre requirementdrug-list membershipYF vaccine not in this branch's PGD setRefer to YF centre
Consultation schema (wizard steps generated from definition — CC-5)
1 · Itinerary & risk2 · Medical history3 · Risk assessment (NaTHNaC-style)4 · Recommendations5 · Supply & multi-dose schedule6 · Invoice & certificate
PGD set (medicine · dose · inclusion/exclusion · expiry)
PGDVersionExpiryStatus
Atovaquone/proguanil (antimalarial)v204/2027Adopted
Rabies (Rabipur) — multi-dose schedulev111/2026Adopted
Typhoid (Typhim Vi)v309/2026Expires in 3 months
Price list (private fee schedule — invoice output, no MYS)
ItemUnit price (£)VATEffective from
Consultation feeexempt1 Mar 2026
Hepatitis A (Havrix Monodose)20%1 Mar 2026
Rabies (Rabipur) — per dose20%1 Mar 2026
Atovaquone/proguanil ×2620%1 Mar 2026
Lifecycle & sign-off (CC-3)
Current active versionv4 · active since 1 Mar 2026 · signed A. Khan (CSO-delegated) GPhC 2061234
Draft in progressv5 · price uplift + typhoid PGD refresh
Sign-off required to activateCSO or delegated clinical author — audited event
Activation supersedes v4 (never deletes it — CC-4); in-flight episodes keep their pinned version. The engine refuses to run a consultation with no active, signed-off definition for the service on that date (fail closed — EP-2 spirit).

Private definitions reuse the same episode engine, wizard, supply and audit machinery as NHS services — only the assurance gate and the money output (invoice vs MYS claim) differ. Supplies emit pmr.service_supply draw-down events to StockIQ.

Service cataloguemaster service list · native consolidation tracker (PharmOutcomes + Cegedim absorption)
Native (live)11
Via PharmOutcomes — G17
Via PharmOutcomes — G29
Native day-one (private/PGD)2
Filter
All (29)National assuredLocal commissionedPrivate / PGDBridge only
ServiceArchetypeCommissionerRecording route nowRollout / coexistence status
Pharmacy First — 7 pathwaysconsultationNHS EnglandScriptIQ native Native (live)
New Medicine Servicemulti-stage pathwayNHS EnglandScriptIQ native Native (live)
Discharge Medicines Servicemulti-stage pathwayNHS England (Essential)ScriptIQ native · MESH ToC Native (live)
Hypertension case-finding (clinic)device-loanNHS EnglandScriptIQ native Native (live)
Contraception (PCS)consultationNHS EnglandScriptIQ native Native (live)
Seasonal flu + COVID vaccinationvaccination + batchNHS EnglandVia Cegedim portal → RAVS Via PharmOutcomes/Cegedim — pending NHS assurance (G1)
NHS smoking cessation (SCS)multi-stage pathwayNHS England (trust referral)Via PharmOutcomes (beta) Via PharmOutcomes — pending NHS assurance (G1)
Childhood flu vaccinationvaccination + batchNHS EnglandVia Cegedim portal Via PharmOutcomes/Cegedim — pending NHS assurance (G1)
Pharmacy First — urgent supply (UMS)referral-intakeNHS EnglandScriptIQ native (BaRS) Native (live)
Think Pharmacy First — local minor ailmentsconsultationTees LPC / ICBVia PharmOutcomes Via PharmOutcomes — pending commissioner onboarding (G2)
Supervised consumption (Tees)multi-stage pathwayMiddlesbrough CouncilVia PharmOutcomes Via PharmOutcomes — pending commissioner onboarding (G2)
Emergency hormonal contraception (Newcastle EHC)consultationPSNE / Newcastle CouncilVia PharmOutcomes Via PharmOutcomes — pending commissioner onboarding (G2)
Needle & syringe exchangeactivity-claimTees Valley CCGVia PharmOutcomes Via PharmOutcomes — pending commissioner onboarding (G2)
NRT voucher redemption (maternity)voucherMiddlesbrough CouncilVia PharmOutcomes Via PharmOutcomes — pending commissioner onboarding (G2)
Travel health consultationmulti-stage pathwayPrivate (no commissioner)ScriptIQ native Native day-one (private/PGD)
Private flu vaccination (Flu Xpress)vaccination + batchPrivate (no commissioner)ScriptIQ native Native day-one (private/PGD)
Transfer of Care — patient feedback (PROMs)PROMs surveyNorth East LPCsVia PharmOutcomes Via PharmOutcomes — pending commissioner onboarding (G2)
Prevention of acute kidney injury (PQS audit)clinical auditNHS England (PQS)ScriptIQ native Native (live)
Bank holiday opening claimactivity-claimNHS EnglandScriptIQ native Native (live)
PSNE pharmacy-services contract 2022commissioning-contractPSNE LtdVia PharmOutcomes Via PharmOutcomes — pending commissioner onboarding (G2)
Two-gate rollout — what each gate needs
G1 · NHS assurance (timing only)
Native delivery of a national/assured service needs per-service NHS assurance + MYS / GP-Connect assurance. PharmOutcomes / Cegedim stay for that service only until ScriptIQ is assured. Buildable now; switch-on is pure timing.
G2 · local-commissioner onboarding (commercial)
To drop PharmOutcomes for a local service, the local commissioner (LPC / ICB / council) must commission + pay via ScriptIQ, or accept ScriptIQ-recorded data + claims. Per-commissioner, the harder "future" part — the incumbent's real moat is the commissioner relationships + payment rails, not the forms.
No gate · native day-one
Private / PGD services (no assurance), the generic form/template engine, practitioner enrolment, and the recording/claiming machinery itself ship natively now.
Coexistence bridge — interim only
Services still on PharmOutcomes16
Services still on Cegedim portal3
Estate logins to retirePharmOutcomes · Cegedim · EMISInsights
Target end stateone PMR-native platform · zero separate logins
Each bridged service shows the incumbent it routes through today and the gate that retires that bridge. The catalogue is the single tracker for the whole absorption programme.

Status enum: native_live · bridge_pharmoutcomes_g1 · bridge_pharmoutcomes_g2 · bridge_cegedim_g1 · native_day_one. Each catalogue entry references its service definition (built in the service builder), its commissioner, its practitioner-enrolment requirement, and its claim route (MYS national vs local commissioner).

Childhood flu vaccinationvaccination + batchVia Cegedim — pending NHS assurance (G1)
Definition summary
Archetypevaccination + batch + care-home campaign
CommissionerNHS England
Active versionv2026.1 · CSO ✓ (CC-3)
StagesPatient → Screening → Consent → Vaccination → Non-vaccination
Practitioner enrolmentRequired — accredited vaccinator
Claim routeMYS national (NIVS) — not local
References (embedded in the template — CC-3)
Influenza PGD + protocolattached
DH Green Book — influenza chapterlinked
Annual flu letter 2026/27linked
Ovalbumin content guide · fallback paper formattached
Like every PharmOutcomes template, the definition carries its own clinical references — these travel with the form, not the user.

A catalogue entry is a thin read view over a service definition. Editing happens in the service builder; the rollout status is governed by the two-gate model on the catalogue.

Service builder — Think Pharmacy First (local minor ailments)local_minor_ailmentsDefinition v3 draftCC-3 lifecycle
1 · Identity2 · Archetype3 · Eligibility4 · Stages5 · Form fields6 · References7 · Funding / claim8 · Enrolment9 · Lifecycle / sign-off
1 · Identity
Service name *
Service code
Commissioner *
2 · Archetype picker (the template's shape)
Selected: Consultation (differential-dx ×3 + supply + exemption, mirroring the Tees minor-ailments template). The archetype seeds the default stages and form sections; you then tailor them below.
3 · Eligibility rules (generic evaluators — data not code, CC-5)
RuleTypeParametersEffect
Resident of commissioned ICS areaarea membership13 NE / N-Cumbria areasBlock if not met
Minimum ageage range≥ 3 monthsBlock if not met
Differential diagnosis in formularycoded-list membership≈45-condition coded listWarn — refer if out of scope
Data-sharing consent (NECS + providers)boolean gateconsent requiredBlocks service if declined
4 · Stages
1 · Patient + ICS area2 · Consultation notes3 · Differential dx (×3)4 · Supply + exemption5 · Outcome + claim
Multi-stage services link a registration → intervention → follow-up; each stage can claim a partial (like DMS / SCS). Single-stage consultations collapse to one form.
5 · Form-field builder (field types — the form-template engine)
FieldField typeRequiredNotes / options
Was patient present?single-selectYesYes / No / Telephone / Video
Consultation noteslong-textYessymptoms / history / prior treatment / exam
Differential diagnosis 1–3coded-list lookupYes≈45-condition list (SNOMED-mapped)
Product given 1–3 + quantitydm+d picker + numberConditionaldraws down via pmr.service_supply
Where heard about servicesingle-selectNoGP / 111 / family / advert / leaflet / social / other
Levy / exemption statusexemption pickerYesfull NHS A–X set + evidence-seen
Clinical photo / body-mapmedia + consentNogated by consent_to_image
Field types: short-text · long-text · number · date · single-select · multi-select · coded-list lookup · dm+d picker · exemption picker · boolean · score-instrument · media+consent · PDS-verify · signature.
6 · References (travel with the template)
Service spec + formulary (PDF) A4 / A5 paper consultation form NICE CKS — minor ailments Local PGD set
7 · Funding / claim definition
Claim route *
Fee model
Consultation fee (£)
Local-commissioner services auto-claim direct to the commissioner per its funding definition (see commissioner claims) — distinct from the MYS national path. Anonymised-reporting opt-in is captured here too.
8 · Practitioner-enrolment requirement
Require an enrolled / accredited practitioner before an episode can start (in-form gate) Required
Accreditation criteriaLocal-minor-ailments training · safeguarding L2 · indemnity
9 · Lifecycle & sign-off (CC-3)
Current statedraft (v3) — price uplift + 2 new conditions
Active version (in force)v2 · active since 1 Apr 2026 · signed A. Khan (CSO-delegated) GPhC 2061234
Sign-off required to activateCSO / delegated clinical author + commissioner (local) — audited event
Activation supersedes v2 (never deletes it — CC-4); in-flight episodes keep their pinned version. The engine refuses to run an episode with no active, signed-off definition on that date (fail closed — EP-2).

This is the surface that absorbs PharmOutcomes' moat: a universal template engine (10 archetypes) + commissioner authoring + per-service practitioner enrolment, all native to the PMR. Definitions reuse the same episode / wizard / supply / audit machinery as the national content packs (content packs).

Practitioner enrolmentper-service accreditation registry · in-form enrolment gate
Practitioners enrolled12
Enrolments expiring <60 days3
Expired — delivery blocked1
Services with an enrolment gate14
Enrolment matrix — Timperley
PractitionerServiceCriteria metStatus
Aisha Khan · Pharmacist (RP) · GPhC 2061234Pharmacy FirstPGD sign-offs ✓ · CPPE ✓Enrolled
Aisha KhanHCF (BP)BP technique ✓ · BIHS device ✓Enrolled
Aisha KhanFlu vaccinationVaccinator + BLS + anaphylaxisExpires 31 Aug 2026
Tom Mills · Technician (ACT)Contraception (PCS)PCS technician training ✓ (from 29 Oct 2025)Enrolled
Tom MillsSmoking cessationNCSCT 4 modules ✓Enrolled
Tom MillsLocal minor ailments (Tees)Local training · safeguarding L2Expires 19 Jul 2026
R. Osei (locum) · GPhC 2207851Pharmacy FirstPGD sign-offs missingNot enrolled — delivery blocked
An episode cannot start unless an enrolled practitioner is selected for that service (the in-form gate). A new PGD version invalidates the cached competency (staff ST-4) → re-enrolment required.
Enrolment detail — A. Khan · Flu vaccination
Accreditation criteria (commissioner-defined)3 of 3 met
Vaccinator competency (CPPE) Evidence on file
Basic life support — annualExpires 31 Aug 2026
Anaphylaxis management Evidence on file
Registration number checkedGPhC 2061234 · in good standing
Evidence attached
CPPE flu cert.pdf BLS 2025.pdf

Enrolment is per practitioner × per service, with commissioner-defined criteria. It is read by the service builder's "enrolment requirement" step and enforced at episode start. Estate-wide reporting rolls enrolment status into the assurance pack (reporting holds no state).

Enrolment — Tom Mills · Local minor ailments (Tees)local_minor_ailmentsExpires 19 Jul 2026
Criteria & evidence
CriterionEvidenceStatus
Local minor-ailments trainingTees LPC e-learning cert · 12 Mar 2026Met
Safeguarding level 2Safeguarding L2 · renews annuallyRenew by 19 Jul 2026
Professional indemnityNPA cover · currentMet
Registration in good standingGPhC technician register checkMet
History & gate effect
First enrolled14 Mar 2026
Episodes delivered under this enrolment41
In-form gate Selectable at episode start
On expiry (19 Jul)Blocks new episodes — re-evidence to restore
Withdrawing or expiring an enrolment never deletes the historical episodes it authorised; they keep the enrolment provenance (immutable). Mirrors PGD sign-off provenance.
Local-commissioned services & commissionersthe historic PharmOutcomes moat — being absorbed (G2)
Commissioners
CommissionerContactServicesOnboarding (G2)
Tees LPC / Tees Valley ICBcommissioning@teeslpc.nhs.uk3In discussion
Middlesbrough Borough Councilpublichealth@middlesbrough.gov.uk3Not started
Pharmacy Services North East (PSNE)contracts@psne.co.uk2Pilot agreed
Newcastle City Councilsexualhealth@newcastle.gov.uk1Not started
The commissioner ↔ provider conduit is PharmOutcomes' deepest moat — named commissioners, contract authoring, the referral + claim + pay rail. Absorbing it is the G2 work.
Local service catalogue
ServiceCommissionerArchetypeStatus
Think PF — local minor ailmentsTees LPCconsultationBridge · PharmOutcomes
Supervised consumption (Tees)Middlesbrough Councilmulti-stageBridge · PharmOutcomes
Needle & syringe exchangeTees Valley CCGactivity-claimBridge · PharmOutcomes
Newcastle EHCPSNE / NewcastleconsultationBridge · PharmOutcomes
NRT voucher redemption (maternity)Middlesbrough CouncilvoucherBridge · PharmOutcomes
PSNE pharmacy-services contract 2022PSNE LtdcontractNative pilot

Per-service status badge: bridge_pharmoutcomes (interim) → native_pilot (commissioner accepts ScriptIQ data) → native_live (commissioner commissions + pays via ScriptIQ). The catalogue rolls these into the estate-wide G2 view.

Think Pharmacy First — Local Minor AilmentsTees LPC / Tees Valley ICBBridge · PharmOutcomes (G2 in discussion)
Service & commissioner
CommissionerTees LPC / Tees Valley ICB
Contactcommissioning@teeslpc.nhs.uk · 01642 …
Archetypeconsultation (diff-dx ×3 + supply + exemption)
Practitioner enrolmentRequired — 2 enrolled
Native definitionv3 draft ready in builder
Anonymised reporting to commissioneropt-in captured
G2 onboarding checklist
Commissioner accepts ScriptIQ-recorded dataIn discussion
Funding definition agreed (per consultation + concession)£14 + concession
Direct claim rail to commissioner configuredPending sign-off
PharmOutcomes bridge retired for this serviceAfter native live
When all four clear, this service flips to native_live on the catalogue and the PharmOutcomes login is no longer needed for it. This is the hard, per-commissioner "future" work.
Activity (recorded on PharmOutcomes today · mirrored for reconciliation)
DatePatientDifferential dxSupplyExemptionClaim
12 JunK. Doyle · 67Conjunctivitis (bacterial)Chloramphenicol 0.5% dropsAge 60+ (B)PharmOutcomes
11 JunB. Hughes · 24Acute otitis mediaAdvice onlyPays levyPharmOutcomes
Local-commissioner claimsdirect-to-commissioner claiming · distinct from the MYS national path
Claimed this month (local)£4,118
Batches awaiting submission2
Settled YTD (FY 26/27)£11,640
Rejected / queried1
Claim batches — by commissioner
Batch refCommissionerService(s)PeriodItemsValueStatus
TLPC-2606Tees LPCLocal minor ailmentsMay 202658£812Ready to submit
MBC-2605Middlesbrough CouncilSupervised consumption · NRT vouchersMay 2026132£1,944Ready to submit
PSNE-2604PSNE LtdPharmacy-services contract activityApr 2026£900Settled 28 May
TLPC-2605Tees LPCLocal minor ailmentsApr 202649£686Settled 30 May
NCC-2604Newcastle City CouncilEHC suppliesApr 202614£280Queried — evidence
Funding definitions (per commissioner — set in the builder)
Tees LPC · local minor ailments£14 / consultation + concession
Middlesbrough · supervised consumption£1.50 / daily supervision
Middlesbrough · NRT vouchervoucher value + £2 fee
PSNE · contract activityactivity-based, monthly
The funding definition lives on the service definition (builder step 7). Claims are auto-generated from completed episodes per that definition — the pharmacy never hand-keys a local claim.
Settlement & provenance
Settlement cyclemonthly · per commissioner terms
Claim history retainedback to FY 14/15 (parity with PharmOutcomes)
Each batch referencesepisode ids · funding definition version · practitioner
Distinct from MYSno contractor 5th-of-month submission

Local claiming is auto-generated direct to named commissioners (councils / LPC / ICB) per their funding definitions — the rail PharmOutcomes runs today. National Advanced (PF / CPCS / flu) stays on the MYS path; vaccinations reconcile via NIVS. Both rails feed reporting; claims-finance owns money state.

Claim batch MBC-2605 — Middlesbrough Borough CouncilMay 2026Ready to submit
Supervised-consumption supervisions96 · £144
NRT vouchers redeemed36 · £1,800
Batch total£1,944
Evidence complete132 / 132
EpisodePatientServiceActivityFunding def.ValueEvidence
SC-4471D. Okeke · 49Supervised consumption22 daily supervisions£1.50 / day£33.00
SC-4488J. Mwangi · 61Supervised consumption18 daily supervisions£1.50 / day£27.00
NRT-2261P. Patel · 33NRT voucher (maternity)Voucher V-88142 redeemedvalue + £2£50.00
NRT-2274F. Osei · 31NRT voucher (maternity)Voucher V-88160 redeemedvalue + £2£50.00

Each line references its episode id, the funding-definition version it was priced on, and the delivering practitioner. The batch is immutable once submitted (parity with the MYS claim-evidence lock CL-8). Settlement and any query route back here.

Daily review cardsStockIQ · integrated modebranch: Timperley
FilterAll cardsowinglow-stockshort-dated supplier:AAHsupplier:Phoenixdmd:319773006deep-link /review?filter=supplier:AAH — supplier-scoped review
To review (18)Owing-driven (3)Low stock (6)Short-dated (4)Dismissed
Amoxicillin 500mg caps ×21
Dispensed today 6 · on-hand 2 · owing 1 (patient waiting)
AI suggests 10AAH £2.86Alliance £2.91
Warfarin 3mg tabs ×28
Dispensed today 2 · on-hand 4
Being ordered by Tom Mills (ACT) — in open basket since 11:04. Locked StockIQ-side; no second order possible.
Locked
Atorvastatin 40mg tabs ×28
Dispensed today 4 · on-hand 6 · low-stock rule hit
AI suggests 12Phoenix £0.89 ✓ cheapest
Amoxicillin 250mg/5ml susp 100ml
Short-dated tab · on-hand 3 · nearest expiry 07/2026
Replacement suggested — routed from labelling short-dated chip (filter=short-dated).
short-datedAlliance £4.12
Item-lock (StockIQ-owned, SQ-6 AC-e)
A line already in another user's open order/basket renders the locked state — "being ordered by {user}" — and offers no second order action. The PMR card only renders the lock StockIQ reports; it never sets the lock (OPEN QUESTION 18). Two pmr.dispensed events for the same product/branch/day collapse to one card.

One card per product/branch/day, driven by pmr.dispensed events · shelf-stock entry → AI-suggested qty → cascade → basket · tabs + filter chips resolve the §5.2 review targets (owing · low-stock · short-dated · dmd:{code} · pip:{code} · supplier:{id}).

Cross-branch Stock Dashboardread-only · StockIQ facade Scope
Below-Min37lines under min · 5 branches · tile → below-min
Expiring ≤3m24short-dated · tile → expiring
Pending orders18awaiting ack/delivery · tile → pending
Owings12patients waiting · tile → owings
Below-Min (37)Expiring (24)Pending (18)Owings (12)
BranchProductOn handMinMaxReorder toState
TimperleyAmoxicillin 500mg caps ×21241210Below min
TimperleyWarfarin 3mg tabs ×284488At min
AltrinchamSalbutamol 100mcg inhaler1396Below min
Sale MoorMethylphenidate 10mg tabs ×28 CD20122Below min · owing
UrmstonLansoprazole 30mg caps ×28351512Below min
Edit reorder policy:min/max/reorder are read-only here

Tiles deep-link to the live StockIQ dashboard filtered (/stock-dashboard?filter=below-min|expiring|pending|owings, §5.2) · scope switcher carried by branch · cross-tenant reads impossible (AC-16) · envelope-wrapped, age-stamped per §5.4.

Shortage procurement routingStockIQ-owned · NR-1branch: Timperley
NCSO (5)SSP (2)Special / SP·ED (3)Out-of-stock (8)
NCSO — price concession active (June interim list)
Quetiapine 25mg tabs ×60concession £6.29 · Tariff £2.41 · dmd:319773006NCSOsubstitute: same drug, endorse NCSO
Naproxen 500mg tabs ×28concession £4.88 · Tariff £1.92NCSO
SSP — Serious Shortage Protocol (procurement half only)
SSP025 · Clarithromycin 500mg tabspharmacist substitution made in dispensing — order the substitute packSSP activeroute → substitute
SSP031 · Estradiol 1mg tabs ×84SSP quantity-restricted substitutionSSP active
Specials (SP/ED) — sourced separately; reimbursement is claims-finance
Captopril 5mg/5ml oral suspension (special)for E. Wright · Part VIIIB unlisted · special-order routeSpecialspecials supplier: Nova Labs
Omeprazole 10mg/5ml oral suspension (special)Part VIIIB £142.60 · quote requiredSpecial
Substitute route — Quetiapine 25mg tabs ×60filter=ncso
Shortage line
Route
Cascade / specials

"Order substitute" lands here from the bench stockout chip (/shortage?filter=ncso|ssp|special or dmd:{code}) · the chosen substitute flows into the cascade/specials path and onto the order pad.

Shortage/concession/specials procurement is StockIQ-owned, deep-linked (§1.3 posture) · whether specials sit inside the cascade or a separate path is a StockIQ procurement decision (OQ-14) · the PMR side is unaffected either way.

Order pad12 lines · cascade applied
Pad modeAll suppliers supplier:AAHsupplier:Phoenixsupplier:Alliancedeep-link /order-pad?filter=supplier:{id} — supplier-scoped pad (§5.2)
Cascade pad (12)MDS / MCS scripts (5)Supplier-scoped
AAH — 7 lines · £214.12 · cutoff 16:30 connected
Amoxicillin 500mg ×21qty 10£28.60
Warfarin 3mg ×28qty 5£9.60
Phoenix — 4 lines · £61.20 · cutoff 17:00 connected
Atorvastatin 40mg ×28qty 12£10.68
Alliance — 1 line · £12.40 · cutoff 15:45 slow API
Methylphenidate 10mg ×28qty 2 · owing for P. Patelurgent£12.40
MDS / MCS cycle padfilter=mdscycle: 28-day · due 18 JunOakwood care home · 14 residents
Resident / wingProductCycle qtyOn handTo orderSupplier
Margaret Thompson · Elm wingAmlodipine 5mg tabs ×28284AAH
Margaret Thompson · Elm wingAtorvastatin 20mg tabs ×28280AAH
John Okafor · Oak wingMetformin 500mg tabs ×565612Phoenix
Oakwood — bulkLansoprazole 30mg caps ×281129Phoenix

MDS/MCS quantities are sourced from the care-home MAR cycle (compliance / dispensing) and ordered ahead of the production runway — distinct from the daily-dispensed review cards.

Cascade picks best price/availability across wholesalers · locked lines stay put · urgent owing lines flagged from the PMR loop · supplier-scoped pad + MDS/MCS tab resolve the /order-pad?filter=supplier:{id}|mcs|mds Ctrl+K seeds (§5.2).

Order outbox
Outbox (1)Sent today (2)History →
OrderSupplierLinesValueStatusETA
PO-TIM-0612-03Alliance1£12.40Sending…
PO-TIM-0612-02AAH7£214.12Acknowledgedtomorrow AM
PO-TIM-0612-01Phoenix4£61.20Partial — 3 of 4 confirmedtomorrow AM
PO-TIM-0611-04AAH11£388.51Delivered — goods-in pending
Owings board ETA panel — per-line fulfilment state (SQ-16)
Owing lineOrderQtyPer-line stateETA
Methylphenidate 10mg ×28 CD2 · P. PatelPO-TIM-0612-032ConfirmedThu (confirmed 09:14)
Naproxen 500mg ×28 · S. BellPO-TIM-0612-0128Partial — 14 of 28 confirmed14 Thu · balance no ETA
Quetiapine 25mg ×60 · J. OkaforPO-TIM-0612-0160Back-ordered — no ETAnone — escalate
Clarithromycin 500mg ×14 · A. HassanPO-TIM-0612-0214Substituted — Klaricid 500mg ×14 offeredtomorrow AM
Salbutamol 100mcg inhaler · A. Khan ord.PO-TIM-0612-993 ETA unknown — ordering unreachablelast data 14:32

Per-line states (Back-ordered / Partial N of M / Substituted {product}) come from orders.statusForOwing (SQ-16). Where SQ-16 is not yet exposed, the generic state shows with no phantom line-status field (AP-4); StockIQ unreachable degrades visibly per §5.4, never a confident-looking stale number.

Order confirm fires stockiq.order_confirmed → owing ETAs in the PMR · delivery fires stockiq.delivery_received → "owed item arrived" tasks · the full filterable history lives on the order-history screen.

Goods in — AAH deliveryPO-TIM-0611-04
Line (AI-extracted)OrderedReceivedBatch / expiryVerdict
Amoxicillin 500mg ×211010L2406A · 03/2028Match
Warfarin 3mg ×2854W9911C · 11/2027Short — 1
Salbutamol inhaler66S5520 · 08/2027Match

Receipt updates perpetual inventory · short/damage claims tracked against the wholesaler · owed-item arrivals raise PMR tasks + patient comms.

Stock — Timperleyperpetual inventory · StockIQ is the stock truth
Search product (dm+d)
Filter
Location
Nearest-expiry sort
ProductOn handNearest expiryLast counted
(count age)
ConfidenceLocationState30-day usage
Warfarin 1mg tabs ×281105/20273 Jun 11dHighW2In date14
Warfarin 3mg tabs ×28410/20263 Jun 11dMedW2 Short-dated22
Warfarin 5mg tabs ×28903/20283 Jun 11dHighW2In date8
Insulin Lantus SoloStar ×5 309/202611 Jun 3dHighFridge Fridge · short-dated6
Dosulepin 75mg caps ×28502/202728 Apr 47dLowD3 Dead stock — 0 dispensed 120d0
Co-amoxiclav 500/125mg ×217 Expiry unknown3 Jun 11dMedC1Expiry not recorded9
"Expiry unknown" is a degraded state, never a fabricated in-date (SQ-14 AC-b / AP-3)
Co-amoxiclav 500/125mg ×21 has no expiry_date on its ledger line — the short-date fields return absent and render "expiry unknown", not a confident-looking date. The short-date threshold is StockIQ-config-sourced, not a PMR constant. The same short-date/fridge chip mirrors onto the dispensing labelling hint (§5.4).

PMR dispense draw-downs land as reason='dispense_out' keyed on event id (no double-deduction with EPOS sales) · credit movements (return_in / write_off / broken_bulk) keep on-hand from drifting down (§4.3a) · the PMR only ever reads this via the stock-facade with the dual fetch + count age above · row click → per-product drug statistics.

Drug TariffJune 2026 · loaded 1 Jun
Tariff monthJun 2026Part VIIIA 21,408 lines
Cat M resetQ1 appliednext quarterly: Jul
NCSO / concessionsJun list (interim)
Snapshot provenanceStockIQ → ref_drug_tariffage 11 days ✓
All Cat A — weighted average Cat M — quarterly calc Cat C — brand-based Part VIIIB — specials Part IX — appliances NCSO active


Select a line to see price basis, history, concession state and endorsement guidance.

Versioned snapshot in public.ref_drug_tariff (provenance + staleness columns) · feeds expected-value estimates, NCSO endorsement suggestions and margin read-models · updates relay as shared.tariff_updated.

Wholesaler settingsper-branch credentials, schedules & cutoffs
AAHSOAP/XMLConnected · last order 09:12
Account number
API credentials
Order cutoff
Delivery days
Cascade priority
Surcharge rules
AllianceREST/JSONDegraded — slow responses
Account TIM-A2240 · cutoff 15:45 · delivery Mon–Fri · cascade priority 2
PhoenixXML PDIConnected
Account TIM-PHX-091 · cutoff 17:00 · delivery Tue/Thu/Sat · cascade priority 3

Credentials vault-stored, never in client code · per-branch schedules drive owing ETAs · cascade order is config, not code.

dm+d & TRUD syncHealthy
DatasetVersionLoadedAge ruleStatus
dm+d weekly (TRUD)2026-wk238 Jun 02:10≤2 months (IS-2)4 days
GTIN supplementary (SQ-12)2026-wk238 Jun 02:14coverage 94% of dispensable AMPsExposed via catalogue API
BNF↔SNOMED mapMay 20262 JunmonthlyOK
PMR read-model pushcontinuousstaleness surfaced in PMR UIIn sync

Single TRUD pipeline (StockIQ) — the PMR keeps a read-only projection for offline dispensing/CDS keys; never a second ingestion.

EPOS — till summaryTimperley · today
Takings£412.65
Transactions57
Rx charges collected£59.40
P-line gatingRP present ✓
TimeItemsTypeTotalMethod
10:22Paracetamol 500mg ×16, plastersOTC£4.78Card
10:18Rx charge ×2 (A. Hassan)Rx charge£19.80Card
10:09Refund — Ibuprofen 200mg ×16 (faulty)Refund−£2.49Card
10:02Chlorphenamine 4mg ×28P-line£3.20Cash
Refunds & voids4 today£18.74 · manager-authorised
Products & pricing2,140 SKUsPLU / barcode admin
Till operators6 staffPIN / permissions

P-medicine lines gate on pmr.rp_status_changed (no pharmacist signed in → queued for authorisation) · Rx-charge collection reconciles with the PMR charge ledger (claims OQ-6) · refunds / products / operator admin are StockIQ-EPOS-owned (NR-7), shown here as deep-link depth only.

EPOS refunds & voids — TimperleyStockIQ EPOS · NR-7
Refunds today4
Refund value−£18.74
Voids (pre-tender)3
Manager auth rate100%
TimeOriginal saleItemReasonAmountTenderAuthorised by
10:09TXN-44820Ibuprofen 200mg ×16Faulty / damaged−£2.49Card (Dojo)Aisha Khan (RP)
09:41TXN-44805Carrier bag ×3Wrong item−£0.30CashAisha Khan (RP)
09:18TXN-44790Vitamin D3 1000IU ×90Customer changed mind−£6.95Card (Dojo)Aisha Khan (RP)
08:55TXN-44781Compression hosiery (sized wrong)Wrong size−£9.00Card (Dojo)Aisha Khan (RP)
New refund
Original transaction
Item
Reason
Refund to
Manager authorisation
Restock to shelf?

Refunds and voids are EPOS-owned (NR-7); a saleable restock posts a StockIQ return_in movement, a faulty write-off a write_off — both EPOS-side, disjoint from the dispensing reverse/credit path (§4.3a).

EPOS products & staff admin — TimperleyStockIQ EPOS · NR-7
Products & pricing (2,140)PromotionsTill operators (6)
SKU / barcodeProductCategoryPriceVATdm+d link
5012616...441Paracetamol 500mg tabs ×16GSL analgesic£1.190%linked
5000158...207Chlorphenamine 4mg tabs ×28 PPharmacy medicine£3.200%linked
EPOS-LOCAL-0042Carrier bagRetail sundry£0.1020%EPOS-local
5012345...118Elastoplast fabric plasters ×20First aid£2.7520%EPOS-local
Till operators
OperatorPINRoleRefund authStatus
Tom Mills (ACT)setCashierNoActive · shift open
Beth HughessetCashierNoActive
Aisha Khan (RP)setManagerYesActive

Catalogue, pricing and operator permissions are StockIQ-EPOS-owned (NR-7) and shown here for deep-link continuity only — the PMR holds no retail SKU or till-operator table.

Drug statistics — Warfarin 3mg tabs ×28dmd:319773006StockIQ · read-onlybranch: Timperley
Product Window as of 14:32 · count age 11d
Dispensed 30d22vs 18 prior 30d (+22%)
Ordered 30d16across 4 POs
On hand4min 4 · reorder to 8
Demand stateRising · seasonalAI demand pipeline
Usage trend — 90 days (weekly dispensed)demand: rising
12 → 22 dispensed/wk over the window · last bar amber = current incomplete week
Dispensed vs ordered (30d)
MetricQtyNote
Dispensed out22true demand signal
Ordered in16net of returns
Returned to shelf return_in2un-collected, restocked
Written off write_off1excluded from demand (RV-3)
Net movement−5drawing down → reorder due
Demand state: rising
Dispensed outpacing ordered for 3 weeks — suggestion engine has raised the reorder-to from 6 to 8 (pinned override by Aisha Khan, 2 Jun).
Order history for this product
OrderDateSupplierQtyUnitStatus
PO-TIM-0612-0212 JunAAH5£1.92Acknowledged
PO-TIM-0605-015 JunAAH4£1.92Delivered
PO-TIM-0529-0329 MayPhoenix4£1.88Delivered
PO-TIM-0522-0222 MayAAH3£1.92Delivered

Statistics are StockIQ-owned read-models over the usage-history demand pipeline (NR-8) · the PMR contributes dispense events as one demand source, never the statistics engine · order-history rows deep-link to /orders?filter=dmd:319773006 · figures carry the §5.4 dual age.

Order history — TimperleyStockIQ · read-only
From
To
Supplier
Product (dm+d)
Quick filtersAll owing-drivendmd:319773006back-orderedsubstitutedfilter=owing · filter=dmd:{code} · from/to
OrderDateSupplierLinesValueOwing?Status
PO-TIM-0612-0312 Jun 11:18Alliance1£12.40urgent · P. PatelSending…
PO-TIM-0612-0212 Jun 09:05AAH7£214.12Acknowledged
PO-TIM-0612-0112 Jun 09:02Phoenix4£61.20owing · S. Bell, J. OkaforPartial — 3 of 4
PO-TIM-0611-0411 Jun 16:22AAH11£388.51Delivered — goods-in pending
PO-TIM-0610-0210 Jun 16:05Phoenix9£176.40Delivered & reconciled
PO-TIM-0609-039 Jun 15:48AAH6£98.22Delivered & reconciled
PO-TIM-0605-015 Jun 09:11AAH8£142.66Delivered & reconciled

Order history is a StockIQ read-only view (NR-1); the PMR reads status/ETA via orders.statusForOwing (SQ-16) but never owns the order or basket · owing-driven rows deep-link back into the PMR owings board · row click → per-order detail.

Order PO-TIM-0612-01 — PhoenixPartial — 3 of 4 confirmed12 Jun 09:02
SupplierPhoenixXML PDI · acc TIM-PHX-091
Lines4value £61.20
ETAtomorrow AMconfirmed 09:14
Owing-linked2 linesS. Bell · J. Okafor
LineOrderedConfirmedUnitPer-line state (SQ-16)Owing
Atorvastatin 40mg tabs ×281212£0.89Confirmed
Naproxen 500mg tabs ×282814£0.69Partial — 14 of 28S. Bell
Quetiapine 25mg tabs ×6010£6.29Back-ordered — no ETAJ. Okafor
Lansoprazole 30mg caps ×281212£0.79Confirmed
Back-order on an owing line is the H-ORD-4 escalation signal
Quetiapine 25mg ×60 (J. Okafor) is wholesaler back-ordered with no ETA — surfaced as a per-line state, never masked as a generic "on order". Route to the shortage surface to procure a substitute.
Order event trail
TimeEventDetail
09:02Created4 lines from order pad · Tom Mills (ACT)
09:03SentPhoenix XML PDI · stockiq.order_confirmed pending
09:14AcknowledgedETA tomorrow AM · stockiq.order_confirmed → PMR owings
09:31Partial confirmNaproxen 14 of 28 · Quetiapine back-ordered (SQ-16)

Order/basket/PO lifecycle is StockIQ-owned (NR-1); this detail is a read-only render through orders.statusForOwing · acknowledgement fires stockiq.order_confirmed → ETA on the PMR owings board · delivery fires stockiq.delivery_received → goods-in task.

Ordering hand-off — one-time-code redemptionshell-identity § 5.5
This hand-offsuccess
Target/review
Filterfilter=owing
BranchTimperley carried always
Codeone-time · ~60s TTL · single-use redeemed
Exchanged token15-min · aud: stockiq-api · server-to-server only
Returnreturn=/dispensing origin allow-listed
Auditstk.deep_link_minted + redemption row
Rejected redemption states (SQ-5 AC-b/c)re-auth required
Expired code
older than ~60s TTL → no session established
re-auth
Replayed code
second use of a single-use code → rejected
replay blocked
Assertion rejected
exchange client-assertion invalid → stk.exchange_failed (reason class only)
401
return not allow-listed
open-redirect guard → return dropped
dropped

A redemption failure renders this explicit re-auth page and renders no tenant data (AC-9); the persistent "Back to PMR" affordance stays available throughout.

The PMR never holds a bearer JWT in a URL · shell-identity owns the exchange mechanics (§1.2) · this module consumes the redemption landing + explicit expired/replayed re-auth state · embedding stays banned (X-Frame-Options: DENY), so the hand-off is top-level navigation, never an iframe.

Delivery — today3 routes · 1 exception
Out for delivery11
Delivered today9
Failed1
PoD completeness100%
Group by runAll runsFirst RunSecond RunThird Run 1 urgent
PatientItemsFlagsWindowRunStorageStatus
Eleanor Wright1 bagCD fridge urgent14:00Third RunCD cabinetDelivered
Margaret ThompsonMDS totecare homeam roundFirst RunBay 3Out
H. Begum1 bagfridgepmSecond RunFridge 1Failed
First Run — live
Round A — Sam Doyle11 stops · 3 done · 2 CD · 1 fridgeFirst Run urgentOut 09:35
Second Run — preparing
Round B — K. Patel8 stops · manifest scan in progressSecond RunLoading
Exceptions
14 Oak Rd — not homeattempt 1 of 2 · contains fridge line → same-day returnReturn to branch
Request intake
PatientSourceItemsFlagsWindow
Eleanor Wrightdispensing handoff1 bagCD Sch 3 AIStoday
Oakwood Care HomeMDS batch12 totesbatchTue round
G. Adamspatient round pref1 bagFriday

Only prescriptions in dispensing state “ready” are accepted (SM-D2) — verified at intake and again at manifest scan.

Delivery — Eleanor Wright Delivered CD Sch 3
Delivery refDEL-4471
RunThird Run
DriverSam Doyle
Storage bayCD cabinet
Delivery
PatientEleanor Wright · NHS 943 476 5919
DestinationClinical site Riverside Surgery, WA15 7BX
Items1 bag · CD Sch 3 · 1 fridge line
Tagsurgent INR-clinic
Sourcepatient round (Third Run)
Charge statusAge-exempt (E) resolved pre-dispatch
Attempts
#WhenOutcomeReason / note
112 Jun 14:08Failednot_home · calling card left
213 Jun 14:11Deliveredto HCP at clinical site

Attempts are append-only — never overwritten (SM-D7).

PoD evidence viewer — attempt 2
Recipient
Sr. Janet Cole (HCP, free-capture)
NMC 04J1234E · ID verified ✓
Way of completion
Given to clinical site / HCP
recipient type: healthcare professional
ID check (CD)
Checked — OK
Signature
captured
Photo
1 image
GPS + timestamp
53.3892, −2.3261 · 13 Jun 14:11:06
Cold-chain
C-3 · 5.2 °C in range · 18 min out
Proof of age
Verified (ID sighted, not stored)
HCP particulars
Timperley District Nursing Team, WA15 7AB
Event trail — append-only
TimeEventActorDetail
12 Jun 13:40createdround jobsource=patient_round · Third Run
13 Jun 13:52scheduledTom Mills (ACT)route R-Doyle-3 · stop 1
13 Jun 13:58manifestedSam Doylebag BAG-4471 scanned · PSU dispatched
13 Jun 14:02out_for_deliverySam Doyleroute started · tracking token minted
13 Jun 14:11arrivedSam DoyleGPS 53.3892, −2.3261
13 Jun 14:11deliveredSam DoylePoD complete · pod_confirmed → dispensing

Every transition is an audit event (actor · branch · route · GPS where captured · correlation id) — no free-form status PATCH (SM-D1). PoD blobs in Azure Blob Storage, never data-URLs.

Route planner — Fri 12 JunRun:First RunSecond RunThird Run
Unassigned stops — tray (9)drag onto a route below
FilterAll sourcesHandoffPatient roundMDS batch urgent only
StopSourceFlagsRun
Eleanor Wright
12 Brook Lane
handoffCD AIS Third
John Okafor
eRD 2/6 · 5 Pine Ct
patient roundFirst
Susan Bell
warfarin · 9 Birch Rd
patient roundINR-linkedSecond
D. Pryce
11 Sycamore Dr
handoff charge unresolvedFirst
Care-home grouped stops — one pin per home+wing (CC2, SM-D11)
Oakwood — Lavender Wing ×6 bagsFirst Run · morning round
Oakwood — Rose Wing ×3 bagsFirst Run · morning round
Postcode-cluster & map assist
Cluster map — WA15 / WA14stops grouped by postcode sector · drag a cluster to a route
ClusterStops
WA15 6xx Timperley core4
WA15 7xx clinical sites2
WA14 4xx Altrincham edge3

Optimise button arrives in a later phase (OQ-5) — clustering is a manual assist for now.

Round C — Third Run, afternoon (draft)
StopFlagsETA
1Eleanor Wright — 12 Brook LaneCD AIS urgent14:10
2G. Adams — 31 Mersey Ave14:25
3H. Begum — 7 Lime Walkfridge14:40
Manifest gate — constraints checked
Charge resolved (pre-dispatch, SM-D10)1 blocking — D. Pryce
Address diff vs patients moduleAll match
Care-home wing resolved (SM-D11)All wings set
CD policy — same-day return ruleOK
Fridge — cold-chain containerAssign container C-3
Attempt caps (policy: 2)OK
A chargeable prescription cannot be manifested while claims-finance charge_status = unresolved — listed as a blocking discrepancy (SM-D10). Stale-address mismatch flags the stop for planner confirmation (SM-D8).
Loading — Round Bscan each bag onto the van
Scan next bag onto VAN-02
6 of 8 matched · retrieve from the bay shown below · point scanner at the bag barcode
6 / 8
BagPatientStorage / bayScanVerdict
BAG-2291T. O'NeillBay 309:51:12Matched
BAG-2292H. Begum (fridge)Fridge 109:51:40Matched · container C-3
BAG-2293R. SalimBay 2Expected, not scanned
BAG-2294R. Naylor (CD Sch 2)CD cabinetExpected, not scanned
BAG-2207(yesterday's route)09:52:08Scanned, not expected — remove

Both discrepancy classes block route start until resolved. Wrong bag at the door is re-checked by the driver's doorstep re-scan.

Returns processingreceive-back queue
Same-day mandatory 1
H. Begum — fridge linefailed 14:42 · cold-chain assessment required before restockQuarantine
To process 2
14 Oak Rd — not homeattempt 1 of 2 · rebook or return to shelf
Remote cancel — D. Lloydprescriber cancellation mid-route (SM-D9) · driver alerted, bag returningIn transit back

returned_to_branch → dispensing reverts the prescription to ready + PSU back to “ready to collect” · failed CD/fridge never stays on the van overnight (SM-D5).

Delivery policies — tenant config
Policy
Attempt cap before return
CD evidence ladder
Fridge evidence
Safe-place delivery
Driver location tracking
Vans
VanRegCold chainStatus
VAN-01MX21 KLPcontainer C-1, C-2Round A
VAN-02MX23 TRVcontainer C-3Loading
Start-of-shift vehicle check
07:54 online
VAN-02 — MX23 TRV
Ford Transit Connect · white · Sam Doyle
VIR walkaround must pass before you can start the route. A defect flags the vehicle and prompts the planner.
Walkaround checklist
Mileage (odometer)
Defect notes

Skippable only where the route has no assigned vehicle. Inspection rows are append-only (SM-D20) — recorded against vehicle + driver + date.

Driver app — My routeseparate PWA · offline manifest
09:51 offline · 4 queued
Round A First Run · 11 stops · started 09:35
Vehicle check (VIR)Passed 07:54
3 · Eleanor Wright urgentCDAIS
→ Riverside Surgery (clinical site)
4 · G. Adams
31 Mersey Ave
7 · Oakwood — Lavender Wing×4 bags
grouped wing batch · morning round
5 · H. Begumfridge
7 Lime Walk
Stop 3 of 11 urgent
09:53 offline
Eleanor Wright
12 Brook Lane, Timperley WA15 6QX
Tags: urgent · INR-clinic
Deliver to: Riverside Surgery (clinical site — not home)
3 Riverside Rd, Timperley WA15 7BX · receiving contact: Practice Nurse
Deaf-blind — use deaf-blind manual (AIS — non-dismissible)
Driver instruction
"Ring buzzer twice, allow extra time — patient is housebound." (pat note · category=delivery)
Housebound Two-person lift Oxygen cylinder
Controlled drug (Sch 3) — ID check required
Authorised recipients: patient; M. Wright (daughter). Unannounced HCP → capture HCP particulars in PoD.
Stop 7 of 11 — care home
10:31 offline
Oakwood House — Lavender Wing
4 Elm Grove, Timperley WA15 6QX
Lavender Wing — north entrance
Morning dose round · ask for round nurse at nurse station (not reception)
Wing batch — 4 bags, hand to round nurse together
Margaret ThompsonMDS tote
A. ColemanMDS tote
D. Prycefridge
R. NaylorCD Sch 2
Recipient defaults to care staff (wing nurse) · CD + fridge floors still apply per bag
Proof of delivery
Eleanor Wright · ladder for highest item class:
CD Sch 3fridgeage-restricted
Recipient type
Recipient name
HCP not on authorised list — free-capture required
HCP name
HCP address / base
Registration no (NMC)
ID verified at door
ID check (CD)
Cold-chain handover (fridge)
Container id
Temp reading °C
Time out of fridge
Proof of age (age-restricted item)
Attestation
Way of completion
 signature canvas (CD floor)
GPS + timestamp always captured · idempotency key for offline replay

Way-of-completion options are constrained to the recipient type + ladder: safe-place / letterbox / neighbour are disabled for CD & fridge (AC-28 floor).

Runs & standing rounds — Timperleynamed delivery waves
First RunOut 09:35
Morning · Sam Doyle
18 patients11 stops
Second RunLoading
Midday · K. Patel
13 patients8 stops
Third RunScheduled 14:00
Afternoon · Sam Doyle
9 patients6 stops
Standing-round patientsrecurring auto-orders · 40 active · 1 paused
PatientRunDaysNext dateStatus
Margaret Thompson
Oakwood Care Home
First RunMon · ThuMon 16 JunActive
Susan Bell
warfarin · INR-linked
Second RunFriFri 20 JunActive
Eleanor Wright
CD · deaf-blind (AIS)
Third RunTueTue 17 JunActive
John Okafor
eRD 2/6
First RunWedWed 18 JunActive
Ahmed Hassan
in hospital
Second RunMon— paused —Paused

Standing rounds auto-generate delivery requests on each due date (patient repeat task + default driver). Pause suppresses generation without losing the schedule — used for hospital/respite spells.

Live trackingactual vs optimised route
Branch
Run
Driver
Date
Live map placeholder
Driver position updates every 30s while route in progress
Driver actual route Optimised route
Sam Doyle · near 12 Brook Lane · 09:53
Stop ETAs — First Run
#StopETAStatus
1T. O'Neill09:42Delivered
2R. Salim09:49Delivered
3Eleanor Wright CD09:56Arriving
4G. Adams10:08Pending
5H. Begum fridge10:21Pending
Extra mileage vs optimised+1.4 mi
Time vs expected−3 min

GPS breadcrumb (red) is captured per stop and replayed against the optimised route (blue) on the driver performance scorecard. Tracking active only while the route is in progress (worker-privacy policy).

Estate delivery dashboardcentral ops · 76 branches · today
On-time %94.2%
First-attempt %91.8%
ePOD completeness99.1%
CD-evidence completeness97.4%
Cold-chain deviations3
Extra mileage (estate)+212 mi
Exception queues
QueueOpen
Failed deliveries7action
Overdue (past window)4review
PoD incomplete5chase
CD evidence incomplete2urgent
Cold-chain deviations3quarantine
Same-address concentration breaches1
Vehicle compliance due (insurance/MOT/road-tax)2renew
Open VIR defects1blocked

Concentration breach is a flag, not an auto-block (SM-D17) — legitimate concentration (a care home, a family) is suppressed by the reviewer per fingerprint. A defect verdict blocks the vehicle from assignment until cleared (SM-D20).

Cross-branch routes — live
BranchRunDriverDoneStatus
TimperleyFirst RunSam Doyle3/11Out
TimperleySecond RunK. Patel0/8Loading
Chapel LaneFirst RunI. Mitchell9/9Complete
AltrinchamFirst RunD. Okeke6/12Out
SaleSecond RunL. Hughes2/101 failed

Same-address concentration breach = more deliveries to one address than policy allows (diversion safeguard). CD-evidence + cold-chain deviations escalate to the responsible pharmacist for sign-off.

Collections — Timperleyclick-and-collect & locker
Booked5
Ready3
Collected today12
Uncollected ≥7d1
Booked 2
Priya Patel1 bag · click-and-collect counter urgent
John OkaforeRD 2/6 · locker pickup
Ready 2
Ahmed Hassanlocker L-04 · awaiting collectionLocker L-04
Susan Bellcounter handout · ID on collection
Collected 1
T. O'Neillcollected 11:20 · counter · PIN verifiedCollected
Uncollected 1
R. Salimlocker L-02 · booked 6 Jun · 7-day limit reachedExpired

Locker handout issues a one-time PIN (SMS to patient). Counter handout confirms recipient + ID. Uncollected past the limit → expired-returned: parcel returns to dispensing shelf, prescription reverts to ready.

Vehicle fleet5 vehicles · 2 expiry alerts
NameBranchRegTypeInsuranceMOTRoad taxVIR
VAN-01TimperleyMX21 KLPVan14 Nov 2602 Sep 2601 Aug 26Pass
VAN-02TimperleyMX23 TRVVan22 Jan 2728 Jun 2615 Dec 26Defect
CAR-DoyleTimperleyMA19 OPLCar09 Oct 2619 Mar 2701 Mar 27Pass
BIKE-03TimperleyBiken/an/an/aPass
EV-Sale-01SaleEV72 NXGEVLapsed 04 Jun11 Nov 26EV exemptDue

Expiry pills: green > 30 days, amber within 30 days, red lapsed. Each vehicle carries a driver walkaround (VIR) check — defects route to the fleet manager.

VAN-02 — MX23 TRV MOT due 28 Jun
Vehicle
Reg no *
Vehicle type
Colour
Make / model
Branch
Cold-chain container
Compliance & reminders
Insurance expiry
Insurance reminder
MOT expiry
MOT reminder
Road tax expiry
Road tax reminder
VIR — driver walkaround inspections
DateDriverVerdictNotes
13 Jun 2026 07:55Sam DoyleDefectNearside tyre tread low — reported
12 Jun 2026 08:02Sam DoylePass
11 Jun 2026 07:48K. PatelPass

Daily VIR (configurable checklist) is recorded by the driver in the app before first delivery. A defect verdict blocks the vehicle from route assignment until cleared.

Drivers — Timperley4 drivers · 3 active
NameTypeBranchAssigned runsShiftService areaStatus
Sam Doyle
sam.doyle@timperley.nhs
DedicatedTimperleyFirst Run Third Run08:00–16:00SetActive · on route
K. PatelHybridTimperley · SaleSecond Run10:00–18:00SetActive
D. OkekeSharedTimperley · AltrinchamFirst Run07:30–15:30Not setActive
L. HughesDedicatedTimperleySecond RunNot setInactive

Driver identity reuses the ScriptIQ shell login (no separate account). Type: Dedicated = one branch · Shared = many branches · Hybrid = mixed. Service area is a geofenced zone drawn per driver.

Driver — Sam Doyle Active
App loginRunsDetailsService areaShift hours
Role
First name *
Last name *
Status
Email (app login) *
Driver type
Runs — standing-round assignment for this driver:
Mobile
Address
Training certificate
CD-handling.pdf
Service area (geofence)
Polygon-draw map placeholder — WA15 / WA14 zone set
Shift start
Shift end
Auto-logout
Auto-logout policy: driver is logged out 45 min after shift end — unless parcels are still "on the way", in which case the session stays open until all are delivered, then logs out. Cannot log back in before the next shift.

Wages / payroll (mileage / hourly / on-cost) are out of scope for the ScriptIQ delivery module.

Broadcast to drivers
Message
Scope
Subject
Message
Priority
Recipients — 3 drivers on shift
DriverRunStatus
Sam DoyleFirst ThirdOn route
K. PatelSecondLoading
D. OkekeFirstOff shift
Channel + delivery (SMS / in-app push) is resolved by comms against each driver's contact prefs — not chosen here.

Audit: who raised it, scope, recipients and the resulting comms request ref are recorded. The send outcome is owned and surfaced by comms.

Can't deliver — Stop 3 CD Sch 3
09:58 offline · queued
Eleanor Wright
→ Riverside Surgery (clinical site) · WA15 7BX
Same-day return required — this bag contains a CD (Sch 3) + fridge line. It cannot stay on the van overnight (SM-D5) and cannot be redelivered from the van tomorrow. Returns to branch today for receive-back.
Reason * (coded)
Note
GPS + timestamp always captured
Re-attempt window
Attempt 1 of 2 (policy cap: 2). Next attempt window: tomorrow, Third Run 14:00–16:00 — needs a fresh request after receive-back (CD never redelivers from the van).

Append-only del_attempts row (never overwritten, SM-D7). Emits delivery.failed (informational to dispensing — the prescription stays held, the bag is still attributed to this route until receive-back).

End of route — Round AFirst Run
12:18 online
11 stops · 9 delivered · 2 returning
Sam Doyle · VAN-02 · back at Timperley
2 bags coming back — hand to branch receive-back. A failed CD/fridge bag must never stay in the van overnight (SM-D5).
Returns summary
Eleanor Wright
id_check_failed
CD · same-day
14 Oak Rd — H. Begum
not_home (attempt 1)
fridge · same-day
Confirm the van is empty before you finish. Any undelivered bag left in the van is a roadworthiness + CD-security hazard.

Van-empty confirmation is mandatory — the Complete-route action is blocked until ticked. Emits delivery.route_completed; returns hand off to the branch Returns queue for scan-back + disposition (restock / quarantine / pharmacist review).

Driver app — sign in
07:48 online
ScriptIQ Driver
Timperley · separate PWA
Email
Password
MFA code
Branch context is fixed by assignment (not chosen here). Device enrolled per platform policy. After sign-in → start-of-shift vehicle check (VIR).

Identity reuses the shell-identity login (no second credential, SM-D19). Auto-logout 45 min after shift end unless stops are still out for delivery; cannot re-login before the next shift.

Money dashboardJune 2026 · Timperley
Claimable now£4,210
Gate-blocked£830
Awaiting payment£18,940
Variance (May)−£120
NCSO / concession uplift this month+£742feature 70 · positive concession income · 7 listed lines
Service income MTD£1,486
Open alerts4
Money left unclaimed — alerts
FP34C_DEADLINE
Month not declared — due by the 5th · £18.9k at stake + advance timing
PF_THRESHOLD_NEAR
24 CP consultations by the 25th — 6 more reaches the £1,000 band
RX_VOID_RISK
3 prescriptions >150 days undispensed · est. £74 lost at day 180
NCSO_IMPACT_MONTH
June concession uplift +£742 over tariff — above the £500 threshold · positive income to ensure is claimed (concession − tariff, 7 listed lines) → review registry
Month cycle
May — FP34C declared4 Jun ✓
May — bundle dispatchedtracked ✓
May — Schedule receivedexpected ~25 Jun
June — cut-off5 Jul (provisional)
Claims boardmoney states are event-driven projections — not draggable
Gate-blocked 3 · £817
Rx ····2291SSP ref missingitem: salbutamol — SSP 3-digit refSSP_REF_FORMAT£24.50 · 9 days
Rx ····3380Charge unresolvedno RTEC match, no declaration, not paidCHARGE_RESOLVED£9.90 · 2 days
Rx ····1107Endorsement missingdispensed item lacks its mandatory EREM endorsement codeENDORSEMENT_PRESENT£28.40 · 1 day
Claimable 38 · £4,210
Rx ····4413A. Hassanall gates pass — in next sweepClaimable£31.20
Submitted / accepted 612
Rx ····0042M. Quinnaccepted 11 Jun · month: JuneAccepted£18.75
Rejected 2
Rx ····2288OperationOutcome: endorsement invalidRe-gate & resend£42.10
Claim — Rx ····2291gate_blocked
Gate failures (data-driven rules)
SSP_REF_FORMAT
Item 2 (salbutamol — SSP substitution) lacks the 3-digit SSP reference. Fix in dispensing endorsements; this board never edits clinical data.
ALL_ITEMS_FINALpass
COLLECTEDpass (collected 3 Jun)
CHARGE_RESOLVEDexempt — RTEC ✓
ENDORSEMENT_PRESENTpass
Money state & evidence
Expected value£24.50 estimate (is_estimate=true until paid)
Dispensing monthJune 2026
Exemption evidenceRTEC match (maternity) · 09:31 · immutable once submitted
Historyaccruing → finalised → gate_blocked (9 days) · correlation 7f3a…
When gates pass → claim.rx_claimable → dispensing's sweep calls gateClaim() and sends the FHIR Claim.
expected_value_basis — value breakdown (CM-6 · each component carries its rate version)
ComponentBasis / rate versionAmount
Item 1 — salbutamol 100mcg inhalerPart VIIIA · Cat M · tariff snapshot v2026-06£14.78
Item 2 — Eumovate 0.05% cream (special, SP)specials reimburses at manufacturer invoice price, not tariff£6.20 specials_invoice_pence
SAF — single activity feeSAF rate v2026/27 · £1.52 (backdated May 2026)£1.52
SP — specials / extemp fixed feeapplied claim_endorsement_fee_rates v2026/27 · £20.00£20.00
MF — measured-and-fitted appliance feenot applicable — no Part IX appliance item on this Rx
ED — extra-dispensing feenot applicable

Note: header total shows £24.50 pending the SP_ED_AMOUNT resolution above; specials reimburse at invoice price (£6.20) + the £20 SP fee is additional. Fee values resolve only from claim_endorsement_fee_rates — never hard-coded (AC-21/22). Re-seeding the fee table at a new effective date changes the estimate without a code change.

Specials manufacturer invoice — SPECIALS_INVOICE_PRESENT gate (AC-22)
ItemEumovate 0.05% cream (SP — specials)
Invoice price£6.20 specials_invoice_pence = 620
Manufacturer / refSpecials Lab UK · INV ····7741
Invoice artefactretained Blob specials_invoice_ref · immutable evidence
GateSPECIALS_INVOICE_PRESENT — pass
Linked broken-bulk record — BB_QUANTITY evidence (AC-27 · feature 163)
EndorsementBB broken bulk — item 1
Productsalbutamol 100mcg inhaler (dm+d ····0421)
Pack broken / dispensedpack 200 · qty dispensed 1 · remainder 1 returned to stock
Claim basisfull pack broken for a part-pack supply — reusable remainder accounted
RecordedTom Mills (ACT) · 11 Jun 2026 · claim_broken_bulk_records 1:1 with BB endorsement
A BB claim requires this linked record (product, pack size, qty dispensed, reusable remainder, basis); absent it, BB_QUANTITY blocks. Retained as BB-claim evidence and shown in the item's evidence trail.
Exemptions & chargesauthoritative charge owner — D-CC5
RTEC checks today61
Confirmed exempt44
No match → declaration11
Charges collected£59.40
Owing — open£39.60
RTEC & declarationsOwing ledgerHC2 / HC3 capturesFP57 receiptsExemption categories
RTEC outcome stream · declaration capture
TimePatientMethodResultEvidence
10:18Ahmed HassanCharge paid2 × £9.90 = £19.80card · txn ····4471 · FP57 declined
09:31Susan BellRTECExempt — maternity (MatEx)RTEC payload · exempt_confirmed
09:14L. ChenDeclarationUC — evidence not seendigital capture ref · captured Tom Mills
08:52P. OkoroRTECNo match → declaration takenrtec_status: no_match · MedEx declared
Owing ledger — unpaid NHS charges (CM-12 · never blocks the claim)
PatientRxOwedIncurredStateAction
John OkaforRx ····5521£19.80 2 × £9.9011 Jun · took meds, no cardOpen
Eleanor WrightRx ····5488£9.90 £9.90 of £19.809 Jun · CD deliveryPart-paid
R. SinghRx ····5390£0.002 JunSettled cash · 7 Jun
D. FrostRx ····5102£9.9021 MayWritten off gone-away · mgr

Open/part-paid owings emit the balance delta to patients (patient balance). Write-off ≥ threshold → superintendent; reason mandatory. The NHS charge is still due to NHSBSA — the claim is correct.

HC2 / HC3 — Low Income Scheme captures
PatientKindCert no.Valid toHC3 max paidRoute
Priya PatelHC2 — full helpHC2 9931 442031 Oct 2026exemption evidence · no charge
G. MensahHC3 — partial helpHC3 7720 118514 Aug 2026£4.10 of £9.90balance → FP57 refund
FP57 refund receipts — issued so the patient can reclaim from NHSBSA (3-month window)
Receipt no.PatientRefund ofIssuedClaim window ends
FP57-TIM-00318G. Mensah£5.80 (HC3 over-paid)14 Jun 202614 Sep 2026
FP57-TIM-00317M. Akhtar£9.90 (later exempt)8 Jun 20268 Sep 2026
Exemption-category dataset — versioned, effective-dated viewer
CodeCategoryCert?RTECEffective fromTo
0009 / age60+ (DOB-derived)nonot RTEC
MatExMaternity exemptionyescovered
MedExMedical exemptionyescovered
HC2 / HC3Low Income Scheme (full / partial)yescovered
UCUniversal Creditnocovered
WarPenWar Pension / armed forcesyes (counter)not RTEC — MoD
ISIncome Support withdrawn14 Apr 2026
JSA(IB)Income-based JSA withdrawn14 Apr 2026
Income Support / JSA(IB) removed as exemption categories from 15 Apr 2026 — the picker rejects them after 14 Apr 2026 with a human-readable reason. RTEC covers maternity/medical/PPC/LIS/HMRC/DWP-incl-UC — not education or MoD. Age derives from DOB, never declared. This module owns the authoritative charge_status, owing, HC2/HC3 and FP57; patients holds the resulting balance.
Handout charge panel — Ahmed Hassan claims-finance componentcharge_status: unresolved
Charge context — getChargeContext(rxId)
RTEC check (at labelling)No match — service_available
Items chargeable2 items
Current rate (versioned)£9.90 / item · 2026/27
Charge due2 × £9.90 = £19.80
RTEC covers maternity/medical/PPC/LIS/HMRC/DWP-incl-UC — not education or MoD. PPC £32.05 / £114.50 · HRT PPC £19.80.
Resolve charge status
Declaration category (effective-dated — currently-valid only)
Evidence seen?
SeenNot seen
HC3 maximum the patient pays
Take now, pay later — opens a claim_owings entry (D-CC5)
Owing opened£19.80 · state: open
Emits topatients — patient balance delta
An unpaid chargeable item handed out creates an owing — it does not block the claim (CM-4): the NHS charge is still due to NHSBSA and the claim is correct; the unpaid amount is a tracked debt. Captured here at counter handout and at the to-delivery step.

Component owned by claims-finance, embedded in the dispensing handout screen (counter + to-delivery). Methods: recordChargeCollection · captureDeclaration · recordChargeRefund (FP57) · recordOwing · recordLowIncomeCertificate (HC2/HC3). Evidence immutable once the claim is submitted.

FP34C month-end — June 2026cut-off in 23 days
EPS claims swept (continuous)1,311 sent
Gate-blocked to clear before cut-off3 · £830
Paper bundle (FP10/FP10MDA) — count & batch41 forms
FP34C declaration in MYS portal
Bundle dispatch — track & trace ref
FP10PCD (private CD) monthly submission
Advance payment ETAon-time submission → ~20 days earlier
Reconciliation — May 2026awaiting sign-off
Expected (est.)£21,310
Paid (Schedule)£21,190
Variance−£120
Open / out-of-tolerance2
Claimed-vs-paid by FP34 Schedule heading — canonical claim_fp34_headings vocabulary (v3, eff. 1 Apr 2026)
heading_codeCategorySignExpectedPaidΔToleranceState
BASIC_PRICEbasic_pricecredit£18,140£18,140£0within_toleranceMatched
DISPENSING_FEEdispensing_feecredit£1,496£1,496£0within_toleranceMatched
SAFsaf single activity fee £1.52credit£985£985£0within_toleranceMatched
ESTABLISHMENTestablishment_paymentcredit£0£18+£18within_tolerance < £50 / 0.5%Accepted
CATM_ADJcat_m_adjustment Cat M quarterly movementdebit£1,480£1,395−£85out of toleranceInvestigating
DISC_DEDUCTIONdiscount_deduction discount-scale / Margin Surveydebit−£860−£860£0within_toleranceModelled — expected
CLAWBACKclawback advance adjustment / recovery−£35−£35out of toleranceOpen
SERVICE_PAYMENTservice_paymentcredit£1,069£1,051−£18within_toleranceMatched
Every parsed total keys to a canonical heading_code + heading-set version — no free strings (CM-7). within_tolerance resolves from claim_recon_tolerances (per-month £50 / 0.5%, finance-signed) — never a literal; a within-tolerance variance does not raise PAYMENT_VARIANCE_OPEN. The national discount-scale deduction is categorised discount_deduction, never unexplained (CM-6). Sign-off (central finance / superintendent) closes the month; original Schedule artefact retained in Blob — the module never fabricates paid figures.
Service claiming calendar — JuneMYS per-service APIs
StreamProvisionsDeadlineCaps / bandsStatus
Pharmacy First24 CP · 6 UMSverify by 5 Jul
24/30 to £1,000 band
Accruing
NMS19 episodesmonthly via MYScap headroom 31 of 38 (0.9%)Accruing
DMS3 (1 partial £12+£11)5 JulAccruing
Hypertension (HCF)12 clinic · 2 ABPMmonthlyoutlier caps TBD 2026/27Accruing
May — all services61was 5 JunSubmitted ✓
PPV-audit worklist — NHSBSA Post-Payment Verification (claim_service_evidence_packs in 'requested') · respond before the deadline
Service refQuarterServicePinned versionPPV stateResponse deadlineValueAction
NMS-TIM-0291Q1 2026/27 (Apr–Jun)NMS — Susan Bell (warfarin)content v7 · pinnedrequesteddue in 6 days · 20 Jun£28.00
PF-TIM-0188Q1 2026/27 (Apr–Jun)Pharmacy First (CP) — A. Hassancontent v7 · pinnedrequesteddue in 11 days · 25 Jun£14.00
NMS-TIM-0274Q4 2025/26 (Jan–Mar)NMS — John Okafor (eRD)content v6 · pinnedrespondedanswered 2 Jun£28.00awaiting NHSBSA
NMS-TIM-0240Q4 2025/26 (Jan–Mar)NMS — M. Quinncontent v6 · pinnedrecoveredupheld 14 May£28.00closed

Worklist anchored in claim_service_evidence_packs (1:1 with each assembled service claim · ppv_state requested → responded → upheld/recovered, AS-4). A PPV-sampled month is evidenceable end-to-end (D-CC4): which claims, which pinned content versions, what was retained, how the audit was answered.

PPV response — NMS-TIM-0291ppv_state: requested
Claim & pinned evidence — claims-finance pointer (AS-4)
Service claimNMS-TIM-0291 · Susan Bell (warfarin) · £28.00
QuarterQ1 2026/27 (Apr–Jun) · provision month May 2026
Episode refclin episode ····8841 — evidence read in clinical-services, never copied (AS-1)
Pinned content versionNMS content pack v7 · pinned at assembly
Evidence packretained Blob ····/ppv/nms-0291 · rendered by reporting
Record NHSBSA response
Outcome
Response reference
Notes
Recording a response moves ppv_state requested → responded and clears SERVICE_PPV_OPEN once submitted. The pack document itself is produced by reporting (AS-4) — this records only the pointer + response trail.
Local-commissioner settlementthe third claim channel — direct to LPC / ICB / council
Claimable to commissioners£2,415
Awaiting remittance£1,176
Paid MTD£3,090
Disputed / blocked£42
CommissionerPeriodServicesItemsValueStatusRemittance ref
Tees LPC
BACS · monthly
May 2026Local Minor Ailments · Supervised Consumption38£1,240.00Submitted — awaiting remittanceLC-TEES-0042
PSNE LtdMay 2026PSNE Pharmacy Services contract11£415.50Paidremit 31 May
Middlesbrough CouncilJun 2026Supervised Consumption · EHC26£760.00Assembling
Newcastle PCNNRT follow-up3£42.00Blocked — G2 not onboarded

Channels never cross (CM-13): EPS/FP34 (NHSBSA) · MYS national services (Service claiming) · local-commissioner (here). Patient charge/owing stays on the NHSBSA model; local income feeds the GL export (CM-LC-3). Consumes clin.local_claim_ready (assemble) + clin.commissioner_contract_accepted (bank/ledger setup); emits claim.local_claim_submitted / _accepted / _paid / _disputed. Payment-rail particulars = OQ-15.

Private & veterinary invoicing
Issued this period£312.97
VAT output (Jun)£14.40
Aged debt > 30d£78.00
Account customers6
InvoicesAccount customersAged debt
No.ClassCustomerLinesNetVATGrossStatus
INV-TIM-0292veterinary_pomvOakwood Vets (practice acct) · re: "Bramble" (canine)Meloxicam 1.5mg/ml ×1£24.50£4.90£29.40Issued — 7d
INV-TIM-0291private_serviceOakwood Care Home (account)Private flu ×4£78.00£0.00£78.00Issued — 14d
INV-TIM-0290private_rxD. LloydPrivate Rx — sildenafil 50mg ×8£24.99£0.00£24.99Paid
INV-TIM-0289private_serviceT. BarnesTravel consult + typhoid Vi£65.00£0.00£65.00Paid
Account customers — statements at group scale
AccountTypeBalanceTerms
Oakwood Care HomeCare home£78.0030 days
Oakwood VetsVet practice£29.4030 days
Timperley LodgeCare home£0.0030 days
Aged debt
BucketAmount
Current (0–30d)£29.40
31–60 days£78.00
61–90 days£0.00
> 90 days£0.00
VAT output total (Jun)£14.40

Veterinary POM-V is private + standard-rated VAT (20%, 2026/27) — billed to the owner or practice account, never the animal-patient; no NHS claim, no FP34/MYS, no RTEC/exemption path (D-CC1). NHS dispensing is outside the scope of VAT. Private Rx never enter the NHS claim machine (CM-10). Numbering per OQ-7 · void requires reason, full audit.

New invoice
Invoice class *
Customer / owner *
Animal / patient ref
DescriptionQtyUnit netVAT rateVATGross
Meloxicam 1.5mg/ml oral suspension (POM-V)1£24.50standard 20%£4.90£29.40
Net total£24.50
VAT output (20%)£4.90
Gross total£29.40

Line sums must reconcile to header totals (invariant). VAT-compliant PDF layout generated for VAT-able lines. VAT treatment of private human dispensing/services is config pending accountant sign-off (OQ-7).

INV-TIM-0292 — Oakwood Vetsveterinary_pomvIssued — 7d
Billed toOakwood Vets (practice account) · re: "Bramble" (canine, owner J. Reed)
Issued7 Jun 2026 · terms 30 days
DescriptionQtyUnit netVAT rateVATGross
Meloxicam 1.5mg/ml oral suspension (POM-V)1£24.50standard 20%£4.90£29.40
Net £24.50 · VAT £4.90Gross £29.40

VAT-output line feeds the GL export by rate. No NHS reimbursement, FP34/MYS line, RTEC or exemption path on this supply (D-CC1).

Finance reference dataversioned, effective-dated — fee changes are data deployments
Service feesCharge ratesEndorsement feesVAT ratesRecon tolerancesFP34 headingsExemption categoriesClaim gate rulesClaiming calendar
Endorsement fixed fees — claim_endorsement_fee_rates · item-level fixed fees (MF/SP/ED) · the single source the CM-6 estimate and the gates both resolve from
endorsement_codeFeeApplies toEffective fromToStatus
MF — measured & fitted / dispensing-appliance fee£2.64 264pPart IX appliance items1 Apr 2026Designed; pre-build
SP — specials / extemporaneous fee£20.00 2000pspecials / extemp items1 Apr 2026Designed; pre-build
ED — extra-dispensing / out-of-pocket-type fee£20.00 2000pspecials / extemp items1 Apr 2026Designed; pre-build
Seeds for 2026/27 re-baselined against the issued Drug Tariff / Endorsement Guidance at EPS onboarding (alongside the gate-ruleset SCAL review). Dispensing owns adding the endorsement; this module owns valuing it and flagging its absence (ENDORSEMENT_FEE_PRESENT / SP_ED_AMOUNT). Like every money-bearing rate, fee changes are data deployments, not releases.
VAT rates — claim_vat_rates · output VAT on private + veterinary supply
codeRateBasisEffective from
standard20% 2000 basis pointsveterinary POM-V; VAT-able private lines1 Apr 2026
reduced5%per item where applicable1 Apr 2026
zero0%zero-rated supply1 Apr 2026
outside_scopeNHS dispensing — never produces a VAT line1 Apr 2026
Veterinary POM-V is standard-rated (D-CC1, decided). NHS dispensing is outside the scope of VAT. VAT treatment of private human dispensing/services is config pending accountant sign-off (OQ-7).
Reconciliation tolerances — claim_recon_tolerances · makes "within tolerance" an auditable rule, not a magic number
Scopeheading_codeAbs bound% boundEffective fromStatus
per_month— (whole month)£50.000.5%1 Apr 2026finance sign-off pending
per_headingCATM_ADJ£40.001.0%1 Apr 2026finance sign-off pending
per_headingDISC_DEDUCTION£30.000.5%1 Apr 2026finance sign-off pending
A variance within either bound is within_tolerance; claim_payment_variances.within_tolerance resolves from here, never a literal (AC-24). Designed; pre-build — conservative starting thresholds flagged for finance sign-off.
FP34 Schedule headings — claim_fp34_headings · the canonical account-heading taxonomy parsed_totals key against (v3)
heading_codeDisplayCategorySignEffective from
BASIC_PRICEBasic pricebasic_pricecredit1 Apr 2026
DISPENSING_FEEDispensing feedispensing_feecredit1 Apr 2026
SAFSingle activity feesafcredit1 Apr 2026
ESTABLISHMENTEstablishment paymentestablishment_paymentcredit1 Apr 2026
ADVANCE_PAYMENTAdvance paymentadvance_paymentcredit1 Apr 2026
CATM_ADJCat M adjustmentcat_m_adjustmentdebit1 Apr 2026
SERVICE_PAYMENTService paymentservice_paymentcredit1 Apr 2026
CLAWBACKClawback / recoveryclawbackdebit1 Apr 2026
DISC_DEDUCTIONDiscount-scale / Margin Survey deductiondiscount_deductiondebit1 Apr 2026
OTHEROtherothercredit/debit1 Apr 2026
Designed; pre-build — the published heading set is re-baselined against a live FP34 Schedule at NHSBSA onboarding (a document/CSV today, not an API — OQ-1); the taxonomy ships as reference data so corrections are config, not migration. Edits are platform-admin only, effective-dated and audited · system gates undeletable · gate dry-run mode evaluates a proposed ruleset against the live queue before activation (fail-closed: a gate that errors = fail).
Daily cash-up — Timperley Designed · gated behind OQ-6June 2026
Expected cash (today)£59.40
Expected card£34.20
Sessions open1
Variance (today)−£0.50
Cash-up sessions — claim_cash_sessions · rolled from charge collections + owing settlements + counter invoice payments
DateSessionExpected cashExpected cardCounted cashVarianceBanking refState
14 Jun 2026#2 (afternoon)£32.40£18.90open
14 Jun 2026#1 (morning)£27.00£15.30£26.50−£0.50counted
13 Jun 2026#1 (all day)£48.60£29.70£48.60£0.00BANK-TIM-2606-13reconciled
12 Jun 2026#1 (all day)£51.30£22.10£49.30−£2.00disputed

State: open → counted → reconciled → disputed. Schema ships now (Designed; pre-build) so enabling is config + population, not migration — same OQ-6 decision governs card-terminal integration (claim_terminal_txns).

Cash-up — 14 Jun, session #1counted
Expected vs counted
 ExpectedCountedΔ
Cash£27.00−£0.50
Card£15.30£15.30 auto (settlement)£0.00
Total£42.30£41.80−£0.50
Banking reference
Variance note
Expected breakdown — what rolls into this session
SourceMethodAmount
Charge collections (claim_charge_records)cash£19.80
Owing settlement — John Okaforcash£7.20
Charge collectionscard£9.90
Counter invoice payment — INV-TIM-0290card£5.40
Session expected£42.30
Rolled from claim_charge_records + claim_owings settlements + claim_private_invoices counter payments for the session. Opened by Tom Mills 09:02, closing Aisha Khan (RP).
NCSO / concession & endorsement registryJune 2026uplift +£742 this month
Concession-listed lines (June)7
Items dispensed148
Total uplift (June)+£742
Threshold£500crossed → NCSO_IMPACT_MONTH
Monthly concession list — published claim-period data (not code) the NCSO gates reference
Product (dm+d)Concession priceTariff (Cat M)Uplift / itemItemsLine uplift
Amoxicillin 500mg caps£3.94£1.86+£2.0832+£66.56
Carbamazepine 200mg tabs£8.91£3.42+£5.4921+£115.29
Naproxen 500mg tabs£6.20£2.74+£3.4640+£138.40
Quetiapine 25mg tabs£4.78£1.10+£3.6818+£66.24
Trimethoprim 200mg tabs£3.55£1.49+£2.0622+£45.32
Lisinopril 10mg tabs£2.99£0.95+£2.049+£18.36
Mirtazapine 30mg tabs£12.40£4.20+£8.206+£49.20
June total uplift+£742.37

Concession lists land mid-month; an NCSO endorsement referencing a product/month not on this list raises the warn-level NCSO_IN_CONCESSION_MONTH gate on the board.

Endorsement-code reference — channel-aware vocabulary used by the §2.3 data-quality gates
CodeMeaningChannelGate(s)Carries value?
NCSONo Cheaper Stock Obtainable (concession)EPS + paperNCSO_IN_CONCESSION_MONTHreferences concession list
BBBroken bulkEPS + paperBB_QUANTITY + linked broken-bulk recordpack / qty / remainder
XP / OOPOut-of-pocket expenseEPS XP · paper OOP stampOOP_OR_XP_AMOUNTamount (either channel)
MFMeasured & fitted appliance feePart IX applianceMF_PRESENT / ENDORSEMENT_FEE_PRESENTfixed £2.64
SP / EDSpecials / extemp feespecials itemsSP_ED_AMOUNT · SPECIALS_INVOICE_PRESENTfixed £20 + invoice price
SSPSerious Shortage Protocol substitutionEPS + paperSSP_REF_FORMAT (3-digit ref)SSP reference
PC / PNCPrescriber Contacted / Not Contactedpaper onlyPC_PNC_PRESENTcontact flag

Dispensing's endorsement engine owns capture; this module validates completeness/coherence at the gate and never edits endorsements (§1.2). The channel-aware vocabulary (XP↔OOP, PC/PNC paper-only) lives in the versioned gate rules, not code (CM-10).

Inspection readiness — TimperleyShow-and-tell ready
CD balance checksCurrent — last Mon · 0 open discrepancies
RP logContinuous coverage · absences < 2h/day
Near-miss review2 due this week
Fridge logGap — Sat reading missing (Fridge 2)
SOP acknowledgements94% · 3 outstanding
Recalls1 open — MHRA class 2, due Mon
Date checksAll areas current
POM & vet POMHuman ✓ · vet ✓ · 1 Rx-to-follow overdue
Yellow Card / ADR1 unsubmitted · 1 awaiting MHRA/VMD ref
Extemp / specialsAppend-only · 2 this week · checked_by ✓
Operating-without-RP1 interval (Wed 25m, GSL-only)
CD awaiting collection2 Sch-2 dispensed, not handed out (no register entry yet)
Veterinary POM-V currencyCurrent · batch-complete · 0 missing batch
Thermometer calibrationFridge 2 probe overdue — last cert 11 May 2025
Duty of candour1 statutory incident · candour step open (11 Jun)
FP10PCD submissionMay period submitted ✓ · read-only (claims owns)
AIS self-assessmentIn progress · DAPB1605 · first cycle due Mar 2027
DSPT statusStandards Met · evidence bundle ready to export
Audit trailAppend-only · record views logged

Mapped to the five GPhC principles · one click → the underlying register · designed for unannounced inspection. FP10PCD is a read-only claims surface (CD-10); thermometer-calibration / vet POM / AIS / DSPT each click through to their register.

CD registerper-premises, per drug/strength/form pages
Search drug
Schedule
 
Register pageFormRunning balanceLast entryLast check
Morphine sulfate 10mg/5ml oral soln300ml bottles150 mltoday 09:12Mon ✓
Methadone 1mg/ml oral soln500ml1,240 mltoday 08:40Mon ✓
Methylphenidate 10mg tabs×283 packs11 JunMon ✓
Morphine sulfate 10mg/5ml — register pageBalance ✓ 100 ml
Date (occurred)EntryDetail / collector · instalment · witnessQty ±BalanceBy
10 JunReceiptAAH · invoice 88421 · batch MS221-K exp 04/2027 (CDR-15)+200280AK
11 JunSupplyJ. Okafor (patient) · Rx ····4471 · collector: patient · ID asked ✓ verified ✓−100180AK
12 JunSupplyE. Wright (representative) · ID asked ✓ verified ✓ · addr captured−30150AK
12 JunSupply instalment 4/14J. Okafor · methadone-style daily pickup · Supervised on premises ✓ · schedule INST-2291 (CDR-16)−5145TM
12 Jun DestructionObsolete stock denatured · kit DEN-LOT-0612 · method: denaturing kit · Authorised witness: P. Greene (CDAO appt CD-W-014, in-date ✓) · qty denatured 45 ml reconciles (CDR-11/AC-7/27)−45100AK
9 Jun (recorded 12 Jun)Late entrySupply · C. Reilly — flagged late_entry, never blocked (CDR-4/5)appended in recorded orderTM
13 Jun (annotation) CorrectionAnnotation of 12 Jun supply (entry #1188): collector address mis-keyed — corrected to "12 Brook Lane". Original entry unchanged; this is a forward-posted dated annotation (correction_of_entry_id #1188). Note mandatory · fresh re-auth ≤ 5 min · online-only.0no balance changeAK

Append-only (UPDATE/DELETE trigger-blocked) · balance validated in recorded order · corrections are dated annotation rows shown beside the original (never overwrite, no retroactive balance recompute) · Sch 2 supply requires the full collector block · destruction needs an in-scope/in-date authorised witness, a denaturing-kit ref and a quantity_denatured that reconciles (fail-closed, online-only).

Record CD supply — Morphine sulfate 10mg/5mlSch 2 · collector block required
Quantity supplied *
Date occurred *
Prescription / source ref
Collector identity block (statutory — Sch 2)
Collector kind *
Collector name *
Collector address *
HCP registration (if HCP)
Identity asked?
Identity verified?
Instalment block (CDR-16 — optional, for instalment CDs)
Is this an instalment?
Supervised consumption?
Instalment schedule ref

Supervised-consumption status is the field a CDAO / GPhC inspector expects per instalment for treatment CDs (methadone / buprenorphine).

On save → cd.entry_recorded · balance recomputed in recorded order.
Record CD receipt — Morphine sulfate 10mg/5mlGoods-in
Supplier *
Invoice / delivery ref *
Quantity received *
Date occurred *
Batch number (CDR-15)
Expiry (CDR-15)

Batch / expiry are captured from the DataMatrix parse where available — optional, never blocking — so a CD recall sweep can tie an affected batch back to register receipts and supplies (CDR-15, H-REC-3).

Record stock destruction — Morphine sulfate 10mg/5ml Reg 27 · witness required
Quantity to destroy *
Reason
Date occurred *
Destruction method *
Denaturing-kit ref *
Quantity denatured *
Authorised witness (registry-validated at occurred_on)
Witness *
 

Selection is validated in-scope (this branch) and in-date against cd_authorised_witnesses; the appointment scope/office is snapshotted onto the entry (witness_authority_snapshot) so the entry stays self-describing. quantity_denatured must reconcile with the negative quantity_signed or the entry is rejected loudly (AC-27).

Re-auth both parties to confirm.
CD balance check — weekly worklistsession started 10:05 · A. Khan + witness T. Mills
Due / overdue this week (2)
Mon cadenceTimperley — full Sch 2 countlast closed 5 Jun · due 12 JunIn progress
Mon cadenceMethylphenidate spot-checkflagged from a −1 pack discrepancy last weekUnder investigation
Closed (last 4 weeks)
5 JunFull Sch 2 count0 open discrepancies · closed 10:48Closed ✓
Active session — count vs register
PageRegister balanceCountedΔState
Morphine sulf 10mg/5ml100 ml0OK
Methadone 1mg/ml1,240 ml0OK
Methylphenidate 10mg3 packs−1 under_investigation
Investigation note — Methylphenidate 10mg (−1 pack)
Investigation note *
Resolution required before close. Choose outcome:
Closing records cd.balance_check_closed (actor + witness + per-page deltas).
Patient-returned CDs — destruction logseparate from the statutory register (CD-8)
ReceivedPatient refProductQtyDenaturedWitness (staff)
11 Junfamily of E. Carson (deceased)Oxycodone 5mg caps4311 Jun — kit #12T. Mills ✓
9 Junanonymous returnTramadol 50mg209 JunT. Mills ✓

Staff witness (not an authorised witness) is the correct standard for patient returns · never touches register balances · stock destructions live on the register page with an authorised witness (reg 27).

Responsible Pharmacist log — TimperleyRP: A. Khan since 08:55
Self-service RP controls
Live absence budget today1h 25m remaining35m used of 2h aggregate · warn 90m · alert 120m

Controls are gated to the signed-in RP only — the server rejects any on-behalf-of write (RP-1). Sign-out reason recorded (end_of_day / handover / absence / emergency).

DatePharmacist (GPhC)Became RPCeasedAbsences (aggregate)Cover state
Fri 12 JunAisha Khan (2069471)08:5500:00 used todayPresent
Thu 11 JunAisha Khan (2069471)08:5218:3112:30–13:05 (35m — lunch)≤ 2h ✓
Wed 10 JunLocum — P. Novak (2188903)09:0013:40 No-RP 13:40–14:05 (GSL-only)
Wed 10 JunLocum — P. Novak (2188903)14:0518:02Present
Operating-without-RP interval — Wed 10 Jun 13:40–14:05 (25 min)
Derived from the sign-out→next-sign-in gap during trading hours (comp_rp_no_cover view). A first-class, reportable interval — GSL-only sales lawful, no POM/P-med supply. Surfaced here and on the dashboard.
Written only by the RP under their own login (RP-1) · append-only events (5-year retention), current RP is a derived view (`comp_rp_current`) · >2h aggregate absence/day raises a warning (RP-3) · presence state gates handout estate-wide; during absence only checked-and-bagged items under a recorded reg-220B authorisation.
Responsible Pharmacist noticeSI 2008/2789 reg 5(3)
REGISTERED PHARMACY
Allied Pharmacy — Timperley
14 Stockport Road, Timperley WA15 7UE · GPhC premises 1099421
The Responsible Pharmacist in charge of this pharmacy at the present time is:
Aisha Khan
Registration number 2069471
Statement (reg 5(3)): the above-named pharmacist is the responsible pharmacist in charge of this registered pharmacy. Generated 12 Jun 2026 08:55 · render format: screen / print-faithful PDF.
Supervision authorisationsSI 2025/1249 registry — effective-dated, revocable
AuthorisedActivitiesBasisByWindowStatus
Tom Mills (ACT)handout checked-and-baggedreg 220BA. Khan1 Feb 2026 → openActive
Counter team (3)handout checked-and-baggedreg 220BA. Khan1 Feb 2026 → openActive
— technician authorisation (prepare/assemble/dispense)reg 220Afrom 10 Dec 2026pending GPhC rulesNot yet available

Permission checks resolve through this registry with effective-date awareness — the matrix changes on 10 Dec 2026 (OQ-3).

Incidents & near misses
Open (3)Near misses (this month: 9)LFPSE submittedReview cycle
WhenKindTypeSeverityDefence chainStatus
11 JunIncidentdispensing error — wrong strength reached patientlow harmdiscovered 11 Jun 14:02 → patient notified 14:25 → remediation loggedLFPSE queued
10 JunNear missLASA pick caught at accuracy checkno harmauto-drafted from scan mismatchReview Fri
8 JunNear misslabelling — wrong directions caught at checkno harmone-tap captureReview Fri

Near misses are local-only (never LFPSE) · the discovery→notification→remediation timestamps are the statutory defence evidence (Pharmacy Order 2018) · CD-related events feed quarterly CDAO occurrence reports.

SOP libraryversioned · reg 4 taxonomy
SOPScopeVersionEffectiveAcknowledgedReview due
Sale & supply — handout during RP absenceestatev47 Jan 2026100%Jan 2027
CD managementestatev61 Mar 202694% — 3 outstandingMar 2027
Delivery & safe-placeestatev212 May 2026100%May 2027
RP changeover (Timperley local)branchv12 Jun 20268 of 9Jun 2027

Prior versions immutable · exactly one effective version per (title, scope) · new version re-triggers read-and-understood acknowledgements.

Recalls & drug alerts
Open actions
EL(26)A/22Atorvastatin 40mg — batch C8821Kclass 2 · stock + patient-contact outstanding 3 patients to contactDue Mon
Completed (last 90 days)
EL(26)A/19Salbutamol neb — batch S119no stock held · no supplied patients · evidenced 28 MayClosed (no_stock_held)
Date-checking sessions
Shelf section A–Fchecked 2 Jun · 3 short-dated flaggedCurrent
CD cabinetchecked 2 JunCurrent
Fridgedue 1 JulScheduled

Action + evidence live here; the stock movement (quarantine/write-off) happens in StockIQ with the reference linked. Patient-matching is computed by dispensing (D-CC3) and consumed here as a display/action cache.

Recall task — Atorvastatin 40mg (batch C8821K) Class 2 · EL(26)A/22deadline Mon 15 Jun
Stock found (StockIQ)2 packs · batch C8821Kas-of 14 Jun 08:12 · 41m old
Supplied patients3 matched (from dispensing)disp.recall_patients_matched · as-of 14 Jun 08:05
Action takenQuarantined — in progressStockIQ ref pending
Stock check (display data — StockIQ owns the truth) Open in StockIQ (quarantine / write-off)
Supplied-patient list — contact action (blocks completion until set)
PatientSuppliedRx itemBatchContact action
Susan Bell (72)3 Jun 2026····2289C8821KContacted ✓ phoned 13 Jun
John Okafor5 Jun 2026····4471C8821K
Ahmed Hassan6 Jun 2026····5012C8821K (unconfirmed) required

Matches are a display/action cache; the match truth lives in dispensing. Each row records a patient_contact_action (none_required / contact_pending / contacted / clinician_referred). recall.patient_contacted is audited per patient.

Complete task — evidence
Action taken *
StockIQ movement ref
Completion validates evidence fields + every match has a contact action.
Fridge / temperature logs
FridgeToday (min/max/current)RangeGaps (30d)Excursions
Fridge 1 — dispensary3.1 / 4.8 / 4.2 °C2–8 ✓00
Fridge 2 — vaccine2.8 / 5.1 / 3.9 °C2–8 ✓1 — Sat 7 Jun1 open
Open excursion — Fridge 2, 9 Jun (8.9 °C for ~40 min)
Stock assessment pending: quarantine default until pharmacist assessment · clinically significant → incident escalation.
POM registerstwo separate statutory registers — never co-mingled
Human POM (comp_pom_register)Veterinary POM-V / POM-VPS (comp_vet_pom_register)Rx-to-follow overdue (1)

Human POM — emergency supplies (patient/prescriber request), private-prescription dispensing & applicable private POM sales · HMR 2012 reg 253 + Sch 26 · 2-year retention.

DateKindPatient (name & address)ProductReason / prescriberPharmacist
11 Junemergency — patientT. O'Neill, 9 Lime Walk, TimperleySalbutamol 100mcg inhaler ×1away from home, previously suppliedA. Khan
6 Junemergency — prescriberV. Singh (Oakwood Care Home)Furosemide 40mg ×28Dr Mehta — Rx to follow by 9 Jun · overdueA. Khan
4 Junprivate prescriptionR. Achebe, 22 Elm GroveSildenafil 50mg ×8Dr Owusu (private) · Rx ····5512A. Khan
2 Junprivate POM saleL. Marsh (counter sale)Sumatriptan 50mg ×2 (Imigran Recovery)pharmacist sale — migraine protocolA. Khan
Rx-to-follow overdue worklist (1)
V. Singh · Furosemide 40mg ×28 (6 Jun emergency-prescriber supply) — the 72h prescriber follow-up obligation passed 9 Jun with no linked prescription. Chase Dr Mehta. Surfaced on the inspection dashboard.

Append-only; corrections are dated annotation rows (online-only, fresh re-auth) · written via pomRegister.record() from the dispensing intake/handout flow · the dispensing private terminal records private_prescription here so it is never a method-less terminal.

Veterinary POM-V / POM-VPS register Batch number mandatory (VMR)
DateKindOwner (name & address)Species / animalProduct · batch · expiryPrescriber (RCVS)By
10 JunPOM-VM. Fielding, 7 Brook Lane, TimperleyDog — "Bramble"Apoquel 16mg ×20 · batch VT88-2291K · exp 03/2027Dr S. Patel MRCVS (RCVS 7041122)A. Khan
5 JunPOM-VPSOakwood Stables, Dunham RdHorse — "Comet"Equest oral gel ×1 · batch EQ-5510 · exp 11/2026SQP J. Hartley (declaration on file)A. Khan
Capture form — vet POM-V supply
Product (VMD code)
Batch number *
Expiry *
Quantity
Owner name *
Owner address *
Species / animal
Prescriber + RCVS
 

Append-only (UPDATE/DELETE trigger-blocked); corrections are dated annotation rows · written via vetPomRegister.record() · rejects input lacking a batch number (VMR mandatory) — never auto-filled.

Audit log viewerappend-only platform pipeline — read surface
Actor
Action
Entity / date range
WhenActorActionEntityBranchRemote
09:31A. Khanpatient.record_viewedSusan BellTimperley
09:31A. Khancds.screen (4 alerts, FDB 2026.05)Rx ····2289Timperley
YesterdayR. Okonkwo (central)dispensing.clinical_check.approveRx ····2114Stockportis_remote ✓

Record views are first-class audit events with care context · every event carries actor, branch, correlation id · export is a disclosure event (approval-gated).

Reg-22 requisition registerfirst-class records — the supply entry references requisition_id (CDR-14)
DateDirectionRequisitioner (profession · address)PurposeProduct · qtySigned formLinked supply
11 Junoutbound supplyOakwood Care Home — Sr V. Singh (RGN) · Dunham Rd, Timperleycare-home stockMorphine sulf 10mg/5ml · 500ml CD-REQ-0442 ✓entry #1188 ✓
8 Junoutbound supplyDr R. Mehta (GP, prescriber) · Park Road Surgery, A81021practitioner bag stockDiamorphine 10mg amps · ×10 CD-REQ-0439 ✓entry #1171 ✓
7 Junoutbound supplySt Anne's Hospice — pharmacy · Altrinchaminter-pharmacy supplyMethadone 1mg/ml · 1,000mlform pending scanawaiting form
Capture requisition — reg-22 particulars
Direction
Requisitioner name *
Profession *
Requisitioner address *
Purpose *
Product (dm+d)
Quantity *
Requisition signed on
Standardised form ref *
On save, the resulting supply entry resolves requisition_id (CDR-14).

Append-only (the requisition is a fixed record once made) · Sch 1–3 CDs never route via hub-and-spoke (HS-4) · works offline (queued; the linked supply resolves requisition_id on replay).

MHRA Yellow Card / ADR reportingmedicine-safety reports to MHRA / VMD — distinct from incidents (LFPSE)
Draft / unsubmitted (1)
MHRA-humanADRLisinopril 10mg — batch L7741angioedema · serious · patient S. Bell (72)Draft
Submitted — awaiting acknowledgement (1)
VMD-vetADRApoquel 16mg — batch VT88-2291Klethargy/vomiting · non-serious · Dog "Bramble" (owner M. Fielding)VMD ref pending
Acknowledged (last 90 days)
MHRA-humandefective medicineAtorvastatin 40mg — batch C8821Ktablets discoloured · non-serious · no patient harmMHRA ref YC-2026-118842 ✓
Capture — Yellow Card report
Scheme *
Report type *
Suspect product *
Batch number
Reaction / problem *
Seriousness *
Subject
Subject detail
Reporter
Capture works offline (queued draft); MHRA/VMD submission is online-only. Link a co-recorded incident via safety_event_id where one exists.

Append-only on report facts (review/submission fields advance; corrections as annotation rows) · 8-year retention (RC-CLIN) · capture-friendly permissions (all clinical staff record; pharmacist+ submits) · failed submission stays in submission_failed with retry + manual-portal fallback.

Extemporaneous / specials preparation registerappend-only · reconstructable years later
PreparedFormula refProductQtyFinished batch · expiryPrepared byChecked by
11 JunSpecials spec SP-0091Menthol 2% in aqueous cream200gEX-0611-A · exp 11 Sep 2026T. Mills (tech)A. Khan ✓
9 JunRPS formula F-114 (paediatric)Sodium chloride 0.9% nasal drops30mlEX-0609-C · exp 9 Jul 2026A. KhanT. Mills ✓ paediatric — 25y retention
Capture — extemporaneous preparation
Formula reference *
Product
Quantity prepared *
Ingredients — per-ingredient batch & expiry
IngredientBatch numberExpiryQuantity
Menthol crystals BP
Aqueous cream BP
Worksheet / calculation ref
Finished batch number *
Finished expiry *
Prepared by *
Checked by *
 

Append-only (UPDATE/DELETE trigger-blocked); corrections are dated annotation rows · written via extempPreparations.record() · RPS MEP / GPhC Principle 4.

Authorised-witness appointment registryCDR-11 · stock destruction validates against this
WitnessAppointed by (CDAO ref)Scope (branches / region)EvidenceValid from → toStatus
P. Greene (system user · GPhC 2071882)NHSE CDAO — appt CD-W-014NW region — Timperley, Stockport, Altrincham appointment letter1 Feb 2026 → 31 Jan 2028 In-date
R. Okonkwo (central ops · GPhC 2055190)NHSE CDAO — appt CD-W-031Estate-wide appointment letter10 Mar 2026 → 9 Mar 2028 In-date
D. Forsythe (external — police/CDAO officer)Greater Manchester CDAO — appt CD-W-007Timperley only on file1 Jan 2025 → 31 Dec 2025 Expired
T. Mills (ACT)— not appointed —staff witness only (patient returns)n/aNot an authorised witness
Appoint authorised witness
Witness (system user or external) *
Appointed by (CDAO ref) *
Appointment evidence *
Scope *
Valid from *
Valid to *
Expired or out-of-scope witnesses cannot be selected in the destruction modal (fail-closed, AC-7).

≥ 5-year retention (governance evidence) · reached from the destruction flow · a staff member whose GPhC registration lapses has their witness eligibility flagged for review (fail closed).

CD awaiting collection / entry-pendingSch 2 dispensed, not yet handed outinspection-mode read
DispensedPatientProductQtyBagged locationWaitingStatus
12 Jun 14:10John OkaforMorphine sulfate 10mg/5ml oral soln100 mlCD cabinet shelf B2 daysAwaiting collection
13 Jun 09:40Eleanor Wright (CD delivery — deaf-blind)Oxycodone 5mg/5ml oral soln120 mlDelivery bay (Sam Doyle round)1 dayOut for delivery

The supply register entry (with the full collector block) is written at handout, not at dispense — so an item here legitimately has no register entry yet. Count on the inspection dashboard. Delivered Sch 2 CDs follow the same timing policy (the register entry resolves on confirmed delivery PoD).

CDAO quarterly occurrence reportsSI 2013/373 · per branch, per quarter
BranchPeriodLinesConcern typesSubmission
Timperley2026-Q22incident diversion_lossGenerated — not submitted
Stockport2026-Q21nil_returnSubmitted ✓ CDAO ref OCR-26Q2-0114
Altrincham2026-Q11prescriber_concernSubmitted ✓ OCR-26Q1-0098

Generation: occurrenceReports.generate(branchId, period) · submission tracking: .markSubmitted(id, ref) · superintendent / central-ops scope · ≥ 5-year retention.

Occurrence report — Timperley 2026-Q2Generated · not submitted
Report lines (cdreporting.co.uk taxonomy)
Concern typeLinked recordSummary
incidentsafety_event #2291Dispensing error — wrong strength reached patient (low harm); LFPSE queued, duty-of-candour in progress.
diversion_lossbalance_check #0612Methylphenidate 10mg −1 pack discrepancy, under investigation at quarter-end.
Mark submitted to CDAO portal
Submitted via
Portal reference *
Submitted on
No API — the report content is generated here; submission is a human action recorded with its reference (occurrence_report.submitted).

"Nothing to report" quarters are still rows — generated with a single nil_return line and submitted the same way (AC-20).

Accessible Information Standard — annual self-assessmentDAPB1605 · TimperleyIn progress · due Mar 2027
Self-assessment — the AIS five steps (2026/27 cycle)
StepSelf-assessmentEvidence note
1. Ask — identify needsMetAIS flags captured on patient record at registration (large-print / easy-read / interpreter).
2. Record — record needsMetCoded against pat AIS needs; surfaced on dispensing & handout screens.
3. Flag — make needs highly visibleMetAIS strip renders on every patient-facing surface; fail-closed if format unavailable.
4. Share — share needs (with consent)PartialShared within estate; cross-org share to GP not yet routed — action logged.
5. Meet need — provide accessible formats / supportMetLarge-print labels & letters produced; see usage evidence below.
Accessible-output usage evidence (this period)
Large-print148 itemse.g. Margaret Thompson
Easy-read12 letters
Braille3 items
Interpreter route6 uses
Status
Evidence pack
Next due
aisAssessment.upsert(branchId, period, responses) · one row per branch per cycle · manager+ · incomplete/overdue surfaces on the inspection dashboard (AC-31).
Data Security & Protection Toolkit — evidence exportthis module's governance contribution Standards Met
Evidence bundle contents (dspt.evidenceExport)
Evidence recordSourceCoverage
Audit-log retention proofAudit viewer8y append-only ✓
CD-register access-control attestationCD registerRBAC + append-only ✓
Incident / safety registersIncidentsComplete ✓
Retention-class coverageRetention mapAll RC classes mapped ✓
RP / SOP governanceSOPs · RP logSOP ack 94% — 3 outstanding
Staff training / registration evidencestaff module (exported view)Read-only · owned by staff
DSPT status (per branch)
Last return: Standards Met (2025/26) · next return window opens Sep 2026.
Patient comms — TimperleyNHS App first · SMS fallback · quiet hours 21:00–08:00
Outbox / logInbound (2)CampaignsOpt-outs
Queued149 quiet-hours deferred
Delivered today312▲ 41 read
Failed3retry then surface
Suppressed7visible — never silent
Call tasks open2phone-pref worklist
Queued — gated at dispatch (4)
09:44Priya Patelowing_arrivedSMS · cy/env2 · Welsh variantQueued — quiet-hours, not-before 08:00
07:10Susan Bellnms_followupSMSv3Queued — outside contact window (after 17:00)
06:58John Okaforcollection_reminderNHS App → SMSday-3 sweep · re-checked at dispatchQueued — awaiting subject re-read (I-10)
06:30Oakwood — Elm Wingmds_batch_readyCare-home → wing nurseresolved: Oakwood / Elm / S. Nwosu (RN)Queued — aggregated per dose-round
Sent — provider accepted (2)
09:51Ahmed Hassanready_to_collectNHS App (PSU)v3 · "bring photo ID" instructionSent — awaiting receipt
09:48Margaret Thompsoncollection_confirmationOakwood — home managercollected by proxy (daughter)Sent
Delivered (2)
09:06Ahmed Hassanready_to_collectNHS App£0 · app legDelivered 09:06
08:40Ravi Sharmadelivery_updateSMS2.4p +VAT · SMS legDelivered 08:41
Read — engagement receipt (1)
08:32Eleanor Wright (carer)delivery_updateNHS Apppaid-SMS fallback suppressed — already read (I-15)Delivered Read 08:35
Failed — surfaced, never silently dropped (1)
YesterdayG. Adamsnms_followupSMShard bounce → contact flagged stale to patients · PDS re-sync queuedFailed — non-delivery receipt
Suppressed — terminal & visible (3)
YesterdayD. Prycevaccination_recallSMSopted-out number (STOP)Suppressed — opt_out
YesterdayV. SinghcampaignSMSmarketing — no live consent at dispatchSuppressed — marketing_consent_absent
07:02Beechcroft — Ground Fl.mds_batch_readyCare-home classno wing/home contact resolves — never sent to resident (I-11)Suppressed — care_route_unresolved
Call-task — phone-preference worklist (2)
09:20Harold Briggsready_to_collectphone-only adjustment → call_taskno automated voice (OQ-C5) · routed to branchcall_task_raised
08:15Doris Haleowing_expiredphone preference → call_task"please contact surgery for a new Rx" · branch chase task pairedcall_task_raised

Status groups follow the §2.3 state machine (queued → gated → sent → delivered → read · or suppressed / failed / call_task_raised). suppressed, failed and call_task_raised are terminal-but-visible — a suppressed recall is information a pharmacist needs (H-COMMS-3). Sends pin the template version + language + resolved sender identity; care-home/proxy classes show the resolved target, never the resident's device (I-11). Read is additive over Delivered, never a gate (I-15). Failures retry with backoff then surface — never silently dropped.

Inbound triagegrouped by kind · matched on the most-recent outbound (90-day lookback)
Outbox / logInbound (2)CampaignsOpt-outs
New — to triage2unmatched / human reply
Keyword-action — auto-handled3routed + auto-ack
STOP / START — auto2identifier-level opt-out
Assigned — open1to branch
kind: stop / start — processed automatically (2)
09:12D. Prycestop"STOP" · identifier-level opt-out recorded (all patients on 07••• ••2381) · auto-closed opt_out · autoclosed
Yesterday(unmatched number)start"START" · opt-out revoked · no patient resolved — suppression key still cleared on identifier opt_in · autoclosed
kind: keyword_action — mapped + auto-acknowledged (3)
09:30R. Sharmakeyword_actionmatched: "CANCEL" → delivery_update sent 08:40 (delivery_ref D-4471)route: delivery_reschedule → DeliveryApi auto-ack sentclosed
09:05Ahmed Hassankeyword_actionmatched: "COLLECTED" → ready_to_collect sent 09:51 (prescription_ref Rx-8820)route: collection_handled → branch task marked auto-ack sentclosed
08:20P. Whitfieldkeyword_actionmatched: "CANCEL" → already-delivered delivery (stale subject ref)route rejected by DeliveryApi — no false confirmation
kind: reply — free-text, needs a human (1)
08:50G. Adamsreply"Can I collect tomorrow instead?" · in reply to ready_to_collect (Timperley)
kind: unknown — unmatched identifier (1)
08:02no patient matchunknown"Is the pharmacy open Sunday?" · no recent outbound to this number · routed to tenant triage queue

Inbound model is {stop · start · keyword_action · reply · unknown} (§1.9). STOP/START are the regulatory floor — processed automatically, shown only for awareness. A keyword_action matches the most-recent outbound to that identifier (90-day lookback) so CANCEL/COLLECTED act on the right subject ref, raises the owning module's action via its public API (never a cross-module write), and sends the configured auto-acknowledgement. A stale subject ref is rejected by the owning module and routes to triage with the reason — never a false confirmation to the patient. Anything unmatched stays free-text in triage; the keyword map never swallows a genuine human reply. Triage lifecycle: new → assigned → closed; rows route to the branch of the most recent outbound, else the matched patient's home branch, else the tenant triage queue.

Message templates
Template (class)ChannelsVersionLanguagesAccessibleStatus
Ready to collect ready_to_collectNHS App · SMS · letterv3en cy2/4Approved
Owed item arrived owing_arrivedSMS · emailv2en cy missingn/aApproved
Delivery update delivery_updateSMS · letterv4en cy4/4Approved
Flu invitation vaccination_recall · marketing?SMS · emailv1en cy missingn/aDraft — awaiting approval

Variant key is (class, channel, language, accessible_format) — only approved versions can send (I-2). A missing translation falls back to English (never silence, §1.10) but is surfaced as a coverage gap here; a missing accessible-format variant fails closed (I-13).

Ready to collect — v4 (draft)ready_to_collect · collection
Sender identity *
PECR classification

Branding (sender display name, SMS sender ID, reply number) resolves through the sender identity — never free-typed on the template (§1.11). Edit senders

Per-language variant grid (en default · cy first-class — §1.10)
LanguageSMS bodyLetter / emailCoverage
English (en)✓ authoredcomplete
Welsh (cy)✓ authoredletter missingfalls back to en
Accessible-format variant set (letter channel — AIS, fail-closed I-13)
Standard Large print Easy read Braille — not authored Audio — n/a

A patient with a recorded print-format AIS need whose required variant is missing suppresses (accessible_template_missing) + raises a branch task — never silently sent the standard variant.

Body editor — SMS 160 chars · no clinical content (I-9)
{firstName} {branchName} {patientInstruction} — locked (bag-label, §2.1c) {optOutLine} — locked
Allowed attachment kinds (email/letter only — default none, §1.14)
easy_read_pdf ✓ exemption_form vaccination_record pod_photo clinical content — OQ-C13 / DPIA-gated
Per-channel preview (en · standard · Timperley sender)
SMS · 07••• ••0142 → "ALLIEDPHM"
Hi Ahmed, your prescription is ready to collect at Timperley Pharmacy. Bring photo ID. Reply STOP to opt out.
Letter / large-print preview
Allied Pharmacy — Timperley
Dear Mr Hassan,
Your prescription is ready to collect…

Minimised content — SMS bodies never carry drug names, conditions or quantities (I-9). Marketing-class templates carry a locked opt-out placeholder on every channel (I-16). The minimisation lint (AC-7) runs over the rendered result including the instruction placeholder.

Opt-out register
PatientChannelScopeRecordedSource
D. PryceSMSall non-essentialtoday 09:12STOP reply
V. Singhall digitalmarketing only3 Feb 2026in-branch

Safety-critical messages (recall notices) ride a separate, narrow override policy — audited per send.

Sender identitiesthe registrable sender behind every template's branding (§1.11)
ScopeODS codeDisplay nameSMS sender IDReply numberStatus
TenantF0000Allied PharmacyALLIEDPHM07••• ••0142 Active
BranchFA123Allied Pharmacy — TimperleyALLIEDPHM07••• ••0142 Not yet registrable — pending NHS Notify onboarding
BranchFB456Allied Pharmacy — Stockportlong code07••• ••0177 Pending Notify onboarding
BranchFC789Allied Pharmacy — CamdenALLIEDPHM07••• ••0190 Active

Templates reference a sender_identity_id (§1.11) — the branding block (display name, SMS sender ID, contact footer, reply number) resolves through it, never free-typed. The reply number must be STOP/reply-capable for reply-bearing classes (§8 reply-path constraint). Linked from Comms settings and the template editor.

Edit sender — Allied Pharmacy — TimperleyPending Notify onboarding
Scope
ODS code *
Sender display name *
SMS sender ID
Reply number (STOP-capable) *
Active
Contact footer (rendered on letters/email)

This is the structured home for the NHS Notify onboarding triad — ODS + sender names + SMS sender ID (OQ-C1a). Saving with Active=No keeps the row visible to template authors but blocks send (no silent £0 dispatch).

Margaret Thompson — Comms Large print (AIS) Oakwood — Elm Wing
OverviewComms
Per-purpose channel preferences (mastered here — single master, lossless round-trip I-12)
Purpose groupSMSNHS AppEmailLetterPhoneRanked
CollectionAIS-forcedApp → letter
DeliverySMS
AppointmentsLetter
InvitationsEmail
MarketingNone — declined (empty channels_allowed → purpose_opt_out)
Preferred contact window (§1.12)
Language
Reasonable adjustment

Edits land via pat.communication_prefs_updated carrying the full per-purpose set + window so the patients round-trip is lossless (I-12). Empty channels_allowed[] for marketing suppresses marketing-class sends only — collection/delivery unaffected (§2.1a).

Message timeline — append-only system of record (I-8)
WhenClassChannelTpl verLangStatusBadges
Today 09:48collection_confirmationHome manager (proxy)v2enSent proxy
Today 06:30mds_batch_readyElm Wing nursev1enQueued — dose-round agg care-route
2 Junready_to_collectLetter (large print)v3enDelivered large_print easy_read_pdf
28 Mayvaccination_recallEmailv1enSuppressedreason: purpose_opt_out (marketing)
14 Maynms_followupSMSv3enDelivered Read
3 Mayowing_arrivedSMSv2enFailedreason: hard_bounce → stale_contact

Merged from CommsApi.getTimeline(patientRef) — read-only on the patient record (the comms module is the system of record, §3.1). Every row pins template version + rendered language + read state + reason code; accessible-format and attachment badges render where present. This is the staff-side mirror of the portal timeline (portal--prefs is the patient-facing view).

Patient portallater phase · NHS login identity · separate deployable
11:20portal.alliedpharmacies.uk
Hello, Ahmed
Timperley Pharmacy · signed in with NHS login
Your prescription is ready
2 items · collect or request delivery
Request repeat
amlodipine, atorvastatin due in 6 days
Track delivery
no active deliveries
Contact preferences
SMS on · quiet hours respected
Superintendent dashboard377 branches · estate scope · live + daily reconcile
Items today ▲ 4.1% vs Wed last wk48,917 ▁▃▂▅▆▄▇ · click for trend
Branches open361/37716 outside trading hours
NMS conversion target 0.40%0.31%▁▂▃▂▄▃▄ · below target
Alerts12 Critical / 34 Warningopen now · live
BranchItemsServicesErrorsRP StatusWait P90Margin
North West region — 142 branches · subtotal
Timperley184 ▲2%60A. Khan ●6m£612
Stockport211 ▲6%32● GAP!41m£540
Altrincham176 ▼1%50M. Osei ●12m£498
Sale158 ▲3%40J. Roy ● absence 92m8m£471
↳ North West subtotal11,20431893 gaps14m£71,940avg
Greater London region — 96 branches · subtotal
Camden243 ▲9%110P. Shah ●9m£701
Hackney198 ▲2%71unknown — last known 10:4817m£583
↳ Greater London subtotal9,88740260 gaps · 1 unknown16m£64,210avg

Default columns Branch · Items · Services · Errors · RP Status · Wait · Margin (§5.1). RP Status renders the live pill with [● GAP!] in Alert Red; Margin carries a daily data-age badge. Hover any number for its freshness class + computed_at + plain-English definition. Central ops is the same product under RBAC scope — every remote act stamps is_remote + the performing pharmacist (claims stay attributed to the originating branch).

Branch performance boardfull-page · region-grouped · league view available
RankBranchRegionItemsWait P90Scripts→VoidMDS DueOwings @ RiskΔ vs Region
1CamdenGtr London2439m14d2£184+18%
2StockportNorth West21141m5d4£392+11%
3HackneyGtr London19817m1d0£77−6%
4TimperleyNorth West1846m11d3£241+4%

Ranked by Items within the caller's branchAccess. Δ vs Region = branch value − region average (§5.11). Selectable columns are off by default so the wireframed seven-column estate layout is unchanged; pin per-user via saved views.

items_dispensed — estate trendgrain: month · trailing 12 periods
Definition (v4, effective 1 Apr 2026): count of supply-event items reaching final state dispensed (excludes not-dispensed; includes owing balances when supplied). Window: calendar month. Freshness: live + daily reconcile. Source: disp_rpt_dispense_volumes.

▌ amber bar marks a definition-version change (annotated, never read as a real movement) · the faded bar is a missing reconciled period rendered as a gap. Period-over-period delta: ▲ 3.8% vs prior month.

Estate exception queuesdeep-links into the owning module · branch-scoped RBAC
Stuck EPS (8)Unclaimed services (12)Expired owings (6)Uncollected >7d (19)MDS due (4)Expiring scripts (11)Recalls overdue (3)
BranchPatient / itemDownloadedToken ver.Status
StockportJ. Crawford · amoxicillin 500mg3 JunR2 — not actionedStuck — dispense notification pending
WilmslowF. Adebayo · ramipril 5mg1 JunR1 — awaiting clearStuck 13d
CamdenS. Bell · warfarin 3mg30 MayR2 — error returnedGateway reject — re-process

Seven mandated tabs (§5.9/§5.16, route ?type=stuck_eps|unclaimed_services|expired_owings|uncollected|mds_due|expiring_scripts|recall_overdue). Rows deep-link into the owning module — stuck/expiring EPS → dispensing EPS console; expired owings → owings; uncollected → dispensing queue; MDS due → MDS-production / resident record; recalls → compliance recall task. Patient-level rows render live under branch-scoped RBAC and are never persisted into rep_* (§2.3 inv 3).

Daily — TimperleySun 14 Jun · default landing for branch roles · saved layout
Items today vs Sun last wk184 ▲ 6▁▃▂▄▅▄▆
Queue depth (live)9intake 3 · check 4 · ready 2
Waiter P50 / P904m / 6murgent/waiter today
RP todayA. Khansigned in 08:46 · no absence
Owings
Due today 5 · overdue 2
Created 3 · fulfilled 4 · expired 0 (28d)
£-at-risk £241
Uncollected bags
>3 days 4 · >7 days 1
P90 age 5.2 days
Count coverage StockIQ · age 6h
88% of SKUs counted within cadence
Service statistics — month-to-date
ServiceRecordedEngagedCompletedDeclinedvs cap / threshold
PF clinical pathways2218418/20 band · 92% of cap
NMS1496231% cap utilisation
HCF / PCS871no cap
Claiming deadlines — next 7 days
NMS Apr cycle — 6 unclaimed · MYS deadline 5 Jul (£312 at risk)
Scripts at risk of voiding
3 open EPS scripts · soonest 1 day to void
Recalls overdue
1 recall task past action deadline (Emerade 300mcg)
MDS due — Oakwood
28-day cycle · 4 days to deadline · 2 scripts outstanding

/reporting defaults to the session's active branch (§5.5). Every tile carries a sparkline + freshness class; the view honours the branch user's saved default layout (rep_saved_view). All numbers are read over exported views — no patient identifiers persist in rep_aggregate.

Remote clinical-check queuecross-branch · risk-tiered · pharmacist-only A. Khan · pharmacist
Risk tierBranchPatient · itemsFlagsAge
High — seniorStockportJ. Crawford · 3 itemsinteraction renal flag22m
MediumCamdenS. Bell · warfarin · new mednew medicine15m
RoutineWilmslowF. Adebayo · 1 item · repeat9m
Local onlySaleK. Lim · 5 items · Sch-2 CD lineCD — never routes cross-entity11m

Claiming calls DispensingQueueApi.claimClinicalCheck(prescriptionId, userId) — row-level locking in dispensing (no double-assignment, H-RC-3) — and opens the dispensing split-panel check with its own B0068 / CIS2 gates unchanged. Checker identity + is_remote=true are recorded on the check record; the prescription advances to accuracy check + handout at the originating branch. Stage routing is config (SM-9); Sch 1–3 CDs never route cross-entity (HS-4).

Alert queue — estateopen → acknowledged → resolved · actor + is_remote audited
Open · critical12
Open · warning34
Acknowledged7
Critical — open
rp_gapStockportIn trading hours with no active RP · raised 11:18
script_expiry_riskTimperley1 EPS script ≤ 1 day to void · unactioned
eps_dlqCamdennhs-gateway dead-letter depth > 0 (3 messages)
Warning — open
rp_absence_limitSaleAbsence budget ≤ 30m remaining (92 of 120m used)
claim_deadline_riskTimperley6 NMS consultations unclaimed · 5 days to MYS deadline · £312
mds_cycle_dueOakwood / Timperley28-day cycle 4 days out · 2 scripts outstanding · Designed
Acknowledged
recall_overdueAltrinchamEmerade 300mcg recall task overdue · ack by M. Osei 10:51 (is_remote)

Seeded system rules: rp_gap · rp_absence_limit (compliance computes the absence budget; reporting renders + escalates) · claim_deadline_risk · pf_threshold_risk · pf_cap_risk · mds_cycle_due · script_expiry_risk · recall_overdue · compliance_return_due · eps_dlq · plus aggregate_job_failed / freshness_violation meta-alerts. Critical alerts re-notify on an escalation timer. A safety check that cannot run is reported as evaluation_failed — never as "no breach" (AD-10 fail-closed). The estate Alerts tile clicks through here.

MDS production runwayhome → wing → cycle · care-home operations (D-CC2) Designed · daily · age 5h
Oakwood Care Home · Timperley branch
Elm Wing · 28-day cycleDue — 4 days18 residents · produce by 18 Jun2 scripts outstanding
Oak Wing · 28-day cycleDue — 9 days12 residents · produce by 23 Junall scripts received
Beechcroft Lodge · Altrincham branch
Ground floor · 7-day cycleOverdue — deadline passed9 residents · was due 13 Jun · not yet produced1 script outstanding

Countdown reflects each home's actual cadence (28/14/7-day, dose-round timing from the patients cycle config) — never a fixed estate cycle. Scripts-outstanding is the mds_scripts_due blocker: a cycle cannot be dispensed until all repeats are received. Rows deep-link into dispensing's MDS-production screen (produce) and the resident record (chase a missing repeat). mds_cycle_due alert: warning inside the runway, critical at the deadline. No resident identifiers persist in rep_aggregate — the outstanding-script list renders live under branch-scoped RBAC.

Remote NMS — central opscross-branch queue · estate scope · live audio/video
Overdue — unassigned2intervention window at risk
Due today14cross-branch
My assigned2A. Khan · locked to me
Lost-to-follow-up — MTD1£0 claimed
Overdue — unassigned (2)
J. Mwangi · 61Altrincham · ramipril · intervention window closed 11 JunEP-4 flagOverdue
P. Whitfield · 55Sale · apixaban · due 10 JunOverdue
Due — my assigned (2)
Susan Bell · 72Timperley · apixaban · locked to A. Khan Mine
R. Salim · 58Stretford · atorvastatin · follow-up due 16 Jun Mine
Lost-to-follow-up (1)
D. Okeke · 49Wythenshawe · 3 contact attempts logged · uncontactablelost — £0 claimed

A remotely-delivered NMS records the remote performer's identity with is_remote=true, while the claim stays with the originating branch (EP-7 / §5.2). Assigning locks the episode to one performer (a second concurrent claim is rejected with the conflict message — H-RC-3). The scope switcher (All branches / My assigned) and Due/Overdue grouping mirror the clinical-services queue; this entry contributes navigation + estate KPIs only and persists no patient identifiers in rep_aggregate. The remote NMS queue exposes no reporting endpoints — it reads GET /api/clinical/worklists/nms-remote directly.

RP status board — estatelive · 60s re-poll of rpStatus.current · highest-value live surface3 gaps2 absence low
BranchResponsible PharmacistGPhCSigned in sinceAbsence budgetState
TimperleyAisha Khan2069XXX08:46120m● Active
Stockport— none signed in● GAP! — trading without RP
SaleJames Roy2104XXX08:3028m left · 92m used● Absence budget low
Hackneyunknown — last known: Active at 10:482233XXXunknown● Unknown — re-poll failed (data > 5m old)
CamdenPriya Shah2188XXX09:02120m● Active

A stably signed-in RP produces no events, so event absence is never read as staleness — the projector re-polls rpStatus.current(branchId) every 60s. A cell whose last successful re-poll or event is > 5 min old flips to "unknown — last known: state at HH:MM" (shown only with its visible data age, never presented as current) and fires a freshness_violation meta-alert (H-RC-1). rp_gap raises a critical alert within 60s; amber when compliance's absenceBudgetRemainingMins ≤ 30 (90 of 120m used).

Report librarygrouped by category · seed pre-built catalogue v7 · system + custom catalogue_version 7
LibraryScheduledExports & approvalsKPI targets
Dispensing
Dispensing volume by branch systemitems_dispensed · disp_rpt_dispense_volumes · estatedaily 07:00 · ran today ✓
Queue-age & waiter percentiles systemqueue_wait_p50/p90 · disp_rpt_queue_ageson demand
Clinical
NMS quarterly (activity summary) systemnms_cap_utilisation · clin_rpt_service_volumes · per quarter × branchquarterly · ran 1 Apr
PPV-readiness scorecard systemDesignedevidence-completeness · clin_rpt_service_evidence · gated on the exported view (D-CC4)data unavailable — view not yet published
Compliance
CD compliance pack systemcomp_rpt_cd_compliance · per branchweekly Mon · ran Mon ✓
Financial
Claims vs paid variance systemclaim_rpt_claim_status · estatemonthly · ran 25 May
Reimbursement forecast & clawback systemDesignedreimbursement_forecast · claim_rpt_reimbursement_forecast / claim_rpt_clawback (OQ-4)data unavailable
Care home
MDS cycle & production runway systemDesigneddisp_rpt_mds_cycles + pat_rpt_mds_schedule (D-CC2)data unavailable
Custom — user / role authored (is_system=false)
NW region — Saturday waiter audit custom · A. Khancloned from "Queue-age & waiter percentiles" · visibility: roleweekly Sat
Stockport owings deep-dive custom · T. Millscloned from system financial · visibility: privateon demand

System catalogue entries are content-versioned by catalogue_version so a report's columns/maths stay reproducible (same defensibility as KPI definition-versioning). Scheduled delivery runs over the platform mail transport — never the patient-facing comms module. Designed rows whose exported view is absent render an honest "data unavailable" rather than a fabricated zero.

KPI targets — effective-dated · reporting.manage_targets (superintendent)
KPIScopeTargetEffective fromEffective toSet by
nms_conversionestate0.40%1 Apr 2026— currentA. Khan
nms_conversionestate0.35%1 Apr 202531 Mar 2026A. Khansuperseded
queue_wait_p90estate≤ 20m1 Jan 2026— currentP. Shah
pf_threshold_progressNorth West region90% of cap1 Apr 2026— currentA. Khan
service_target_completionper branch≥ 95%6 Apr 2026— currentP. Shah

Targets are effective-dated (PUT /api/reporting/targets) — a new value supersedes rather than overwrites, so a KPI tile's "vs target" is read against the target in force for that period, never the latest value retroactively. A target change emits reporting.target_changed (actor + before→after). The seeded alert rule nms_conversion < target reads the in-force row.

Staff directory — Timperley9 active · grouped by branch · nothing silently green (ST-2)2 restricted3 expiry worklist
Timperley — employed (4)
AK Aisha Khan Pharmacist · employed GPhC 2069XXX · verified · exp 11/2026 Indemnity ok · MDU exp 03/2027 RP-eligible
TM Tom Mills ACT · employed GPhC 5521XXX · expiring 09 days Indemnity — employer group policy can_accuracy_check
JO John Okafor Dispenser · employed DBS lapsed · re-check overdue 02/2026 Indemnity — n/a (non-clinical) Invited — not activated
SD Sam Doyle Driver · employed DBS verified · 02/2027 Right-to-work re-check 30 days ● Active
Locums & bank (2)
PN Priya Novak Pharmacist · locum GPhC 2188XXX · verified-conditioned Indemnity ok · PDA exp 08/2026 Not RP-clear — conditioned
RM Raj Mehta Pharmacist · locum GPhC 2241XXX · flagged — re-verify Indemnity expired 05/2026 Pending checks — engagement blocked

Pill vocabulary: registration verified / conditioned (ST-9, RP-restricted but current) / flagged (ST-10, ad-hoc re-verify) / expiring (60/30/7-day worklist) / overdue / lapsed; indemnity ok / expiring / expired (ST-11); onboarding invited / not-activated (read from identity's account state, ST-1 — staff renders, identity owns); employment type employed / locum / agency / bank; headshot per photo_blob_ref. A row is never a flat green "Active" — a lapsed/conditioned/flagged registration fails-close RP-eligibility and every hasCompetency() gate. DBS / right-to-work / emergency-contact detail is manager-scope only (§6); rows show a status flag, not certificate detail. Click a row → staff profile (registrations & checks tab).

ScriptIQ
Allied Pharmacies platform
Email
Password
Forgot password? · Activating a new account? Use the link in your invite email.

One login per day — bench re-entry uses your PIN. 5 failed attempts lock the account (audited).

Two-step verification

Enter the 6-digit code from your authenticator app.

Use a recovery code instead · Lost device? Ask an admin to reset MFA.
Dispensary bench 1 — Timperley Locked (idle 10m)
AKAisha
Pharmacist · RP
Signed in here
TMTom
Technician · rostered
MOMaria
Dispenser · rostered
SBSara
Counter · not rostered today
Full credential login

Operator switch re-attributes the session (hard-cut audit) — it never re-bootstraps. PIN never satisfies fresh-auth or CIS2. "End my day here" is branch-scoped end-of-shift — distinct from "Log out everywhere".

End my day at Timperley

This is the branch-scoped end-of-shift teardown for Aisha Khan. It revokes your daily branch bootstrap:

What this does
  • Removes your lock-screen tile at Timperley
  • Invalidates your PIN-switch on this branch's enrolled devices
  • Revokes your per-operator device refresh chain

Distinct from Log out everywhere (kills all your sessions estate-wide). Audited as identity.logged_out · scope: branch_day. RP sign-out is a separate compliance action.

TM Tom Mills
enter PIN to take over this bench

PIN is re-entry only — never primary login, never fresh-auth, never CIS2. 5 failures lock the PIN. Offline switches queue with attribution.

NHS Care Identity (CIS2) step-up

Releasing prescriptions requires your NHS Care Identity. Choose an authenticator your CIS2 account supports:

Smartcard No reader / agent
FIDO2 security key fallback
Windows Hello fallback
CIS2 iPad app pilot
Retry reader · Restart NHS identity agent (runbook) — status chip shows NHS: reader issue (≠ down ≠ none).
Select role profile (URPID)
Pharmacist — Allied TimperleyR8003 · ODS FLM49 · B0068 B0572 B0401
Pharmacist — Allied StockportR8003 · ODS FE428

Smartcard passcode is entered into the CIS2 client, never here. Session held server-side by nhs-gateway. Status bar: NHS: ● R8003 · 59m — click to view / re-up / end. AAL3 assumed (OQ-3).

NHS session Active
URPID555086689106
Role profileR8003 — Pharmacist
Organisation (ODS)Allied Timperley — FLM49
Activity codesB0068 · B0572 · B0401
Assurance (AAL)AAL3
Expiresin 59 min · 11:42

Ending the NHS session clears gateway tokens and the chip returns to NHS: none — it never logs you out of ScriptIQ. No token material is shown (read from idm_cis2_sessions).

Purging immediately blocks further offline NHS-gated acts (e.g. the offline clinical check); re-up online to restore.

My profile & security
Profile
Name
GPhC number
Default branch
Display initials / colour
Security
Password
MFA — authenticator appEnrolled
Bench PINSet
CIS2 identity linkLinked — URPID ✓
Active sessionsthis bench + back office
Trusted devices "remember this device" — §6.7 OFF on shared bench PCs (default)
DeviceClassGrantedExpiresFrom IP
Back office — Timperley fp_11d9…back-office13 Jun 08:40in 4d 6h10.4.7.12
Aisha's laptop fp_a91c…personal09 Jun 19:02in 1d 2h82.14.x.x
Dispensary bench 1 — Timperley fp_8c2a…bench (shared) Trust disabled for this device class (shared PC, OQ-11)

Revoke writes identity.device_trust_revoked (security-sensitive: shared-PC posture change). Listing/revoke also lives at /settings/security. Final per-class enablement is OQ-11 (CSO/DSPT sign-off).

Usersplatform identity — shared UUIDs with StockIQ
UserRoleBranch accessMFACIS2Status
Aisha KhanpharmacistTimperleylinkedActive
Tom Millstechnician_actTimperleyActive
R. Okonkwocentral_ops42 brancheslinkedActive
P. NovaklocumTimperley (Wed only)linkedTime-boxed

Branch access is rows (idm_branch_access) — individually granted, auditable, revocable, time-boxable. Deactivation never deletes (audit attribution survives).

P. Novak — locum Provisioning: invited
Identity & provisioning lifecycle
Email
Display initials / colour
GPhC registration
Provisioning status (idm_user_profile.provisioning_status)
none invitedactivated expired → one-click re-invite

Re-invite mints a fresh single-use token and invalidates the prior one (idempotent, supersedes). Activation flips status → activated and consumes the token.

Roles (idm_user_roles — rows, not a column)
RoleScopeValid
locumper-engagement branch11 Jun → 18 Jun
dispenserown branchpermanent
Branch access (rows)
BranchLevelValid
Timperleystandard11 Jun → 18 Jun (engagement)
Security admin actions — all require fresh-auth, all audited with actor
Reset MFA
Clears enrolled authenticator; next sign-in re-enrols.
Reset bench PIN
Voids current PIN; user sets a new one on next bench use.
Force-logout
Revokes all sessions + refresh chains immediately.
Force-logout, MFA reset and PIN reset are fresh-auth admin actions; all grants and resets are audited with grantor/actor. Deactivation never deletes (audit attribution survives).
Roles & permissions12 system roles (undeletable) + custom bundles
RoleScope defaultKey permission codesUsers
pharmacistown branchdispensing.clinical_check.perform · cd.supply.record · rp.sign_in · witness.eligible412
technician_actown branchdispensing.accuracy_check.perform · witness.eligible388
dispenserown branchdispensing.workflow · (no checks)506
counterown branchhandout.record · patient.lookup.restricted331
delivery_driverassigned routesdriver-app only · (no shell access)74
branch_managerown branchidm.user_profile.admin · device.enrol · reports.branch96
area_managerassigned branchesreports.multi_branch · (no clinical sign-off)11
central_opsassigned 1–50remote.clinical_check · finance.central · reports.estate18
superintendentall brancheswildcard · dlp.export.approve · incident.review · sessions.force_logout1
locumper-engagement branchdispensing.clinical_check.perform (time-boxed access)57
adminbranch or centralconfig.* · users.manage · (no clinical permissions)9
platform_admincross-tenantconfig.* · never clinical data by default2

Authorisation checks permission codes, never role names · clinical grants require a GPhC number and auto-suspend on registration lapse.

Workstations & sessions
DevicesActive sessions (estate)
DeviceBranchKey fingerprintLast seenOffline cache
Dispensary bench 1Timperleyfp_8c2a…nowfresh · 72h TTL
Back officeTimperleyfp_11d9…09:55minimal
Driver phone — S. DoyleTimperleyfp_e773…09:51 (offline)route manifest only

Device key signs the offline session envelope (non-extractable, 06 §5.5) — revoke wipes the encrypted cache on next contact.

Active sessions (estate)live · idm_sessions + idm_refresh_tokens — revocation source of truth (invariant 7)
UserRole / scopeBranchDeviceIPStartedLast activityMFA
Aisha Khanpharmacist · RPTimperleyDispensary bench 1 fp_8c2a…10.4.7.1008:55now
Aisha KhanpharmacistTimperleyBack office fp_11d9…10.4.7.1208:5609:55trusted-dev
Tom Millstechnician_actTimperleyDispensary bench 2 fp_4b07…10.4.7.1109:0209:58
R. Okonkwocentral_ops · 42 branchesremoteBack-office laptop fp_9d2f…82.14.x.x07:4009:54
Sam Doyledelivery_driver · driver-appTimperleyDriver phone fp_e773…offline08:3009:51 (offline)
P. Novaklocum · Wed onlyTimperley— no active session (invited, not activated) —

Per-row force-logout calls DELETE /auth/sessions/:id — a fresh-auth admin action; revocation is immediate (never waits for token expiry) and writes identity.session_force_logged_out (actor + target + reason). "Log out everywhere" for a single user revokes all their rows + refresh chains at once.

ScriptIQ
Activate your account
You've been invited
NamePriya Nair
BranchAllied Timperley
Roledispenser MFA required
1 · Set your password
New password *
Confirm password *
  • ≥12 characters, upper + lower + number + symbol
  • Not one of your last 5 passwords (idm_password_history)
2 · Set up two-step verification

Scan with your authenticator app (e.g. Microsoft Authenticator), then enter the 6-digit code.

Authentication code *

Invite link is single-use, 72h TTL — this one expires 16 Jun 14:20. There is no out-of-band password: password and first-MFA are set together in this one flow. Token is consumed on activation (provisioning_status → activated).

Reset your password

Enter your account email. If it matches an account, we'll send a reset link.

Email

Always the same generic confirmation — we never reveal whether an email is registered (no account enumeration). Reset link is single-use, ~30 min TTL, rate-limited per email + per IP. Lost your authenticator instead? Use a recovery code or ask an admin.

Choose a new password
aisha.khan@alliedpharmacies.com
New password *
Confirm password *
  • Meets complexity (≥12, mixed case, number, symbol)
  • Matches a password used in the last 5 — choose a different one

Reset token is single-use and consumed here; the set is written to idm_password_history. A failing password returns a typed error, never a generic 400.

Notification preferencestune noise, never safety Digest: hourly
Per-source routing
SourceRouteMin severityDigest
Dispensing — owings/EPSOnlive
Stock & orderingMutedhourly
Finance — claims/owingsOndaily
Comms — failed sendsOnlive
Staff & rota (bell only)Onhourly

Routing writes idm_notification_prefs (mute by source · min-severity floor · digest cadence: live/hourly/daily). Central-ops can batch the estate stream without missing safety.

Safety band — locked

severity = safety. Cannot be muted, snoozed, digested or filtered out. Controls are absent by design.

Fridge / cold-chain excursion Always live
Drug recall task Always live
Safety-flagged bug acknowledgement Always live

A pref row may not lower the safety band — operators tune operational noise only. The same floor holds offline (a cached safety entry cannot be cleared either).

Bell drawer — preview
Fridge excursion — bench 1 vaccine fridge 9.2°C safety
EPS stuck — 3 scripts unreleased > 2h
Owing settled — Susan Bell £9.90 (snoozed until 14:00)
Filter: only unreadhide informational

Safety entries show no dismiss/snooze controls. Filtering is a view operation — it never sets dismissed_at.

Preferencespresentation only — never permission or attribution Designed (pre-build)
Layout & density
SidebarExpandedCollapsed
DensityComfortableCompact
Theme (OQ-10 — dark gated on token package)SystemLightDark

Sidebar-collapsed + density persist per user and are shared across products (09 §4.7). Dark theme is OPEN QUESTION 10.

Default landing

Where the shell lands after login — per role, with a sensible role default.

Default landing route
Re-validated on every read. A pharmacist who loses a branch and whose saved landing pointed there degrades to the role default — a preference never widens access (invariant 13). This same resolution is "their home" used by operator-switch context handling (§5.4).
Pinned palette items — ordered command/cross-product ids promoted to the top of Ctrl+K
Dispensing queue Order stock cross-product Goods in cross-product Owings

Entries you can't see are dropped at resolve time. Pinning personalises the palette only — the global keyboard chord set itself is not per-user-rebindable in v1 (§5.11). See the keyboard-shortcut cheat-sheet.

Report a problemone tracker for the whole platform — routes to IssueIQ
What happened?
Product
Description *
Screenshot (optional)
Attach screenshot optional
Auto-attached context

Captured automatically — you don't fill these in.

Correlation id7f3a-c21e-90ab
Productpmr
BranchAllied Timperley (FLM49)
Screen route/dispensing/clinical-check/:rxId
App version / build2026.06.3 · build 5f21a9
Viewport1440 × 900
ReporterAisha Khan (pharmacist)
Recent errors2 console warnings
Offline? The report queues locally (idm_bug_reports, status queued) and drains to IssueIQ on reconnect. The version string here is the same one shown in the About dialog.
Bug-report triagewithin-one-working-day triage · IssueIQ remains system of record 1 possible-safety3 untriaged
AllUntriagedPossible safety (1)Resolved
RefReportedReporter / branchScreenSummaryTriage classStatusIssueIQ
BR-104209:58A. Khan · Timperley/dispensing/clinical-checkApprove enabled with unresolved severe interaction triaging · safety queue
BR-104109:12T. Mills · Timperley/dispensing/accuracyScanner double-fires on GS1 DataMatrixsentISS-8841
BR-1039Yest 16:40R. Okonkwo · central/reporting/boardAdd CSV export to league tablequeued
BR-103111 JunS. Bell-Counter · Sale/comms/templatesSMS template preview truncates emojidefectresolvedISS-8790
Triage — BR-1042
Triage class
possible_safety
Status
IssueIQ ref

A possible_safety classification keeps the safety-band acknowledgement live until resolved. Triage writes triaged_by/triaged_at; the viewer is online-only (offline reports queue and surface on reconnect).

Keyboard shortcutsopens on ? or Ctrl+/
Global shell-reserved
Command palette / searchCtrl+K
This shortcut overlay? / Ctrl+/
Lock / switch operatorCtrl+L
Branch switcherCtrl+B
Notification bell focusCtrl+J

Shell-reserved chords are immutable and win every collision.

Current module — Dispensing
Next actionable itemF2
Advance statusCtrl+
Open clinical checkC
Paper intakeCtrl+P
Focus scan field/

Module bindings register via registerShortcut() — scoped to this module's routes.

Cross-product
Order stock (StockIQ)Ctrl+Shift+O
Goods in (StockIQ)Ctrl+Shift+G
Review cards (StockIQ)Ctrl+Shift+R

Cross-product chords mint a one-time deep-link code on use (§3.1) — no second login.

Collision rules: a binding clashing with a shell-reserved chord is rejected; two modules registering the same global chord is a registration-time typed error (never silent last-wins). Per-user rebinding is a future candidate, not OQ-blocking.

Branch switcher — open statetop-bar overlay · opens on Ctrl+B Active: Timperley
All typesCommunityDistance/DACHospital outpatient
Pinned · recent & favourite
TimperleyFLM49 · Community Active
StockportFE428 · Community favourite
SaleFA518 · Community recent
Greater Manchester (region)
AltrinchamFH210 · Community
WythenshaweFK883 · Distance/DAC
Cheshire East (region)
WilmslowFN104 · Community
All branches (reporting view)does not switch session

Lists only the user's current idm_branch_access branches; grouped by region, with pinned recent/favourite at the top (idm_user_preferences, §5.9). The "All branches (reporting view)" entry is a destination, not a session state — estate-wide roles (area_manager / central_ops / superintendent) route to the cross-branch reporting surface while the operational session stays single-branch (§5.9).

Branch settings — TimperleyODS FA512effective-dated · audited
Session policyOpening / trading hoursEPS & pollingNHS integrationPrinters & hardwareStage routingFeature flags
Session / idle-lock policy — pmr_config.session_policyprovisional — tracks shell-identity OQ-6
Surface tierIdle-lock (min to lock)Basis
Dispensary bench minshared PC — shortest tier (§5.4)
Back office minsingle-occupant office
Central-ops remote minis_remote sessions
Max session (hard re-auth ceiling)
MFA scope (per role)
Change reason (mandatory)

Registry rejects idle_lock_minutes > max_session_hours×60 and any max-session above the 8 h master-plan ceiling owner-side (AC-8) · superintendent sets estate default, central_ops per-branch override · policy values stay OQ-6, marked provisional.

Opening / trading hours — idm_branches.opening_hours · feeds rp_coverage / branches_open KPI
WeekdaySession 1Session 2 (split / lunch)Status
MondayOpen
TuesdayOpen
WednesdayOpen
ThursdayOpen
FridayOpen
SaturdayOpen
SundayclosedClosed
Bank-holiday calendar
Manual closure flag
ExceptionMon 25 Aug — Summer bank holiday · Closed
ExceptionWed 16 Jul — Stocktake · open 08:30–11:00 only

Registry validates non-overlapping sessions + open < close owner-side (AC-7) · a closure exception drops that day from the rp_coverage/branches_open trading-minute denominator — this block is load-bearing for reporting and the KPIs are unbuildable without it.

EPS & Spine polling — pmr_config.eps
EPS enabled
In-hours poll cadence
Out-of-hours poll cadence
Long-poll

Per-branch polling cadence previously had no home — now written here. branch_manager / central_ops permission. EPS release AAL pinned in CIS2 admin, not here.

NHS integration — read-mostly (OQ-A3)renewal due
LayerState
ODS confirmationFA512 · confirmed 11 Feb 2026
CIS2 / Smartcard readerActive
HSCN/Spine TLS-MA certserial 7A:2C:91 · expires 14 Aug 2026 · 61d — renewal due
EPS service assuranceAssured
MYS service assuranceAssured
NHS Notify assurancePending — Notify onboarding

Display + renewal-due alert only — admin-config holds no certificate material and performs no rotation (AC-16). Cert rotation is platform-ops-executed; write owner settled at OQ-A3.

Branch identity is the shared platform UUID (same as StockIQ) · status ≠ active blocks new dispensing · every block above is written via BranchApi.updateConfig and audited with actor + before/after + reason.

Printers & label hardware
PrinterTypeTransportUsed forStatus
Zebra ZD421 — bench 1ZPLprint-server ws://127.0.0.1item + bag labels, FP10DT tokensOnline
Zebra ZD421 — bench 2ZPLprint-serverlabelsOnline
HP M404 — back officePDF/A4print-serverMAR charts, reports, lettersToner low
Label templates (label-engine)
Standard item label (Sch 26 particulars)v12
Hub-and-spoke variant (spoke identity + assembly date)v3
MDS tray + MAR chartv7
Large print (AIS)v4

Printing was v1's #1 go-live blocker — first-class here. The local print server is the only on-prem footprint.

Stage routing — hub & spoke / remote opseffective-dated · audited
Dispensing stageAllowed locationNotes
Labellinghub variant prints spoke identity + assembly date
Clinical checkremote checker stamped is_remote
Assemblyhub assembly = future Model-1 switch
Accuracy check220A may widen Dec 2026
Feature flagsplatform_adminper-tenant/per-branch allow-lists — every risky feature ships dark
FlagOwnerScopeStateDefault (fail-safe)ConstraintsAllow-list
pmr.dispense_drawdown (StockIQ draw-down writer, DD-1)ordering / SQbranchONoff conflicts: proscript.drawdownTimperley + 11 pilot
ai.accuracy_vision (F1, clinical-adjacent)CSObranchPilotoff requires: ai.platform_enabled CSO sign-offbranch: Timperley
clinical.ip_pathways (autumn 2026 fees)CSOtenantOFF — gated until service liveoffCSO sign-offtenant: —
delivery.safe_placedeliverytenantOFFofftenant: —
platform.global_send_halt (estate comms/EPS halt)platform_admintenantArmed (off)off is_kill_switchtenant: all

Flag flips are audited config changes (actor + before/after + reason) · clinical-gating flips additionally require CSO sign-off in the reason · high-impact flips route through change-control (§2.6a); is_kill_switch flips bypass it by design (§6) · the branch-migration runbook flips pmr_type + draw-down source as one step (SQ-9/DD-2).

Edit flag — ai.accuracy_visionclinical-gating
Identity & accountability
Flag key
Description
Owner (accountable)
Scope
State & fail-safe
State
default_state (fail-safe — INV-F1)
is_kill_switch

A clinical/risky flag may never default to on — a no-row read fails safe to off (INV-F1).

Dependencies & conflicts
requires_flags (INV-F2 — may only be on if every named flag is on)
ai.platform_enabled
conflicts_with (INV-F3 — at most one of the set on per scope key)
none
Allow-lists (pilot scope)
tenant_allowlist
Allied Pharmacies
branch_allowlist
Timperley
CSO sign-off (clinical-gating)
Change reason

Every flag change is an audited config event · INV-F1/F2/F3 validation runs owner-side · effective-dated · clinical-gating flags own to the CSO and route through the change-control rail.

nhs-gateway consoleAll APIs healthy
EPS142ms p95
PDS98ms
PSU110ms
RTECslow 1.2s
MYSok
Message queueDead letters (0)Tokens & signingRate limits
MessageKindAggregateAttemptsNext tryStatus
msg_88412eps_dnRx ····22890nowSending
msg_88409psu_updateRx ····4413 (collected)110:32Retry — 502
msg_88401eps_claimRx ····00420Sent ✓ ack

Never silently dropped: retry with backoff, dead-letter at 24h with operator alarm · drain order is per-prescription causal (DN before claim) · signing key lives in Key Vault, sign-via-API only.

Integration relay — StockIQ event spineHealthy · lag 1.2s
Outbox depth3
Delivered today1,884
Inbound claimed312
Dead letters0
Outbound (PMR → StockIQ)Inbound (StockIQ → PMR)Replay
EventAggregateBranchAttemptsStatus
pmr.dispensedsupply ····8841Timperley0In flight
pmr.owing_createdowing ····112 (urgent)Timperley0Delivered · sync path
pmr.cd_supplycd ····2231Timperley0Delivered (reconciliation, non-deducting)

At-least-once with event-id idempotency (service-credential auth — SQ-10) · no patient identifiers in any payload (schema-validated) · correlation ids trace PMR → relay → StockIQ order.

Scheduler — cron registryRedis-locked · tenant fan-out
JobScheduleLast runDurationResult
eRD issue pullhourly10:0041sOK — 12 issues
Claim sweep (gateClaim per rx)every 15m10:1522s38 claimable → 36 sent
PDS re-verification sweepnightly 02:0002:0018m9,412 traced · 3 exceptions
Void sweep (150/180 days)nightly02:403m3 warnings raised
CD owing day-28 auto-expirynightly02:451s1 expired + task
Partition maintenance (next month)monthly1 Jun12sOK
Reference data — public schema (ref_*)
DatasetSourceVersionAge / ruleStatus
dm+d read-modelStockIQ catalogue API2026-wk234d (≤2 months — IS-2)Fresh
Drug Tariff snapshotStockIQJun 202611dFresh
CDS datasets (FDB Multilex)licensed feed2026.05 (int v126 / all v89 / dose v54)18dFresh · CSO-pinned
Pathways / PGD content packsinternal authoring (CSO)PF v7Signed off
Endorsement / NCSO registryDrug Tariff monthJun 2026monthlyCurrent
DM valuesets (EPS OAS)NHS OAS pinpinnedre-check at SCALPinned

Every ref_* table is a non-authoritative projection with provenance + staleness columns · CDS dataset activation is a device-change control (effective-dated, audited, emits cds.dataset_activated).

SLOs & platform healthJune · error budgets
Availability (core)99.97%target 99.9 · budget 64% left
Queue board p95340mstarget ≤500ms
EPS release p956.1sprovisional ≤10s (PERF-7)
DB pool headroom38%SCAL-1 ≥30% ✓
Deployables
pmr-core3 replicasHealthy
nhs-gateway2Healthy
integration-relay2Healthy
scheduler1Healthy
web / driver-appCDNHealthy
Backups & DR
PITR backups5-min RPO ✓
Geo-redundant backupON (DUR-4)
Last restore drill18 May — verified env, de-identified ✓
Offline soak test (G1.4)passed 02 Jun
Assurance boardthe external critical path — supplier hat
ArtefactStageOwnerStatusNext
EPS onboarding (SCAL → CATR)queue position — Use Case submittedeng + CSOTier 3 pendingSCAL Q&A on issue
DCB0129 hazard log + safety casev2 baselineCSO (A. Sharief)Live documentCSO sign-off per release
DSPT (supplier, Cat 2)2026/27IGStandards metrenew 30 Jun 2027
DTAC packpost-Feb-2026 formIGAssembling — C1 SaMD = yes (CDS)finalise pre-deployment
MHRA — cds moduleUKCA Class I + DORSCSOTech file in progressregister before CDS-enabled FoT
Cyber Essentials Plus + pen testscopedsecurityBooked — CRESTbefore SCAL sign-off
RTEC / NHSBSA onboardingengaged at E (R10)engAwaiting specsdeclaration fallback ready
AIS self-assessment / WCAG 2.2 AAcalendar-boundproductAudit bookedAIS due Mar 2027 (R11)
DCB0129 hazard log & release gateCSO: A. Sharief
Hazards (74)Release sign-offsDCB0160 per-branch cases
HazardModuleInitial riskMitigation → residualStatus
Missed interaction (silent CDS outage as "no interactions")cdsHighfail-closed unavailable state + AC-2 regression → Med-lowControlled
Wrong patient at handoutdispensingHighbag-label scan + collector capture → LowControlled
CD supplied outside 28-day windowdispensingMedSM-7 whole-prescription guard + owing auto-expiry → LowControlled
Stale offline cache during clinical checkcds/dispensingMedage banners + max-age block → LowControlled
Branch migration boardpilot → FoT → flag-gated waves
Live on ScriptIQ12
Wave 2 ready18
Dry-run failed2
Remaining (ProScript)347
BranchReadiness packDry-run importChecksumCutoverStatus
Timperley (FoT)12 May — day 31 of 45Live · clean
Altrinchambooked 23 JunWave 2
SaleCD balances mismatchblockedFix export

Import contract: demographics + active eRD/owings + CD register continuity (opening balances RP-attested) · cutover flips pmr_type + draw-down source as one runbook step (SQ-9/DD-2) · checksum report gates go-live.

Platform admin — tenants & productsplatform_admin only — cross-tenant
CompaniesProduct activationAPI keysToken exchange audit
CompanyHead-office ODSBranches (lifecycle)ProductsTenant status
Allied Pharmacies billing ALD-001FYV88377 · 12 live · 18 migrating · 2 provisioningStockIQ ScriptIQlive
Pennine Care Pharmacy billing PEN-0149 · first branch provisioningScriptIQ — onboardingonboarding
(prospect group)prospectprospect
Product activation — Allied Pharmacies — TenantApi.setProduct · per-tenant entitlement (off / pilot / on)platform_admin · audited
Product / moduleStateactivated_atactivated_byDependent flags (entitlement gate)
pmr core dispensingon12 May 2026R. Okonkwo
clinical_serviceson12 May 2026R. Okonkwoclinical.ip_pathways gated until on
deliveryon12 May 2026R. Okonkwodelivery.safe_place
mds_care_homeon18 May 2026R. Okonkwo
ai_assistpilot04 Jun 2026R. Okonkwo ai.accuracy_vision · ai.platform_enabled
reporting_central_opson12 May 2026R. Okonkwo
Cross-product plumbing
tenant_subscriptions module mapclean (SQ-8 ✓)
Token exchange (RFC 8693 shape)live · 1,422 mints today · audit ✓
Deep-link codes redeemed312 today · 0 replays rejected: 2 (alarmed)
Service API keys (per-tenant)4 active · rate limits ok
Tenant — Pennine Care Pharmacyonboardingplatform_admin
Company / tenant record — platform-identity-owned, surfaced here
Company name *
tenant_status
Superintendent (company super-admin)
Head-office ODS
Billing ref
Contract start → end
Onboarding flow
1 · Tenant provisioned — record + superintendent createddone
2 · First branch provisioning — Stalybridge (lifecycle provisioning)in progress
3 · Product toggles — set entitlements (pilot first)pending
4 · Go-live — branch migrating → live (DD-2 flip)pending
Branch lifecycle states
BranchStateDraw-down source
Stalybridgeprovisioning— (not yet dispensing)
Mossley Roadmigrating ProScript coexistenceProScript (until live)
Hyde CentralliveScriptIQ (flipped at go-live)

provisioning → migrating → live → suspended → decommissioned · the migrating→live transition flips pmr_type + draw-down source as one runbook step (kept consistent owner-side, §2.2 / DD-2).

Product entitlements — TenantApi.setProduct · pilot-first onboarding
ProductState
pmrcore — enable first
clinical_servicesgated until pmr live
ai_assistwhile off, ai.* flags cannot go on (AC-15)

Every tenant/product/lifecycle change is an audited TenantApi action (actor + before/after + reason) · the underlying records remain platform-identity-resident — this is the §1.1 operating surface, not a tenant table.

AI services consoleadvisory-only · fail-closed (AD-10)
Feature rosterUsage & meteringRequest logGate evidence & healthModel + prompt registry
Requests today214
Redaction-blocked2alarmed · never sent
Budget MTD£41.20cap £150
F1 mismatch recall3 false-pos · CSCR review (H-AI-2/3)
Feature roster — F1–F7 (each independently flagged + hazard-assessed, §1.2)
FeatureFlagPrompt ver · hashCSO sign-offValidator pass-rateOutput languageToday
F1 — dispensing accuracy vision check (advisory · never auto-passes)Pilot (Timperley)1.4.2 · 8f3a…c2✓ A. Shariefn/a (vision)en-GB38 calls · 1 mismatch surfaced
F2 — clinical-note draftingON2.1.0 · 4b91…7dschema-conf 99.4%en-GB122
F4 — interaction-explanation (input = fired cds alert)ON1.9.1 · a02c…11severity-match 100%en-GB54
F5 — label/direction phrasing (safety-lexicon + token-equivalence)ON1.6.0 · c7e4…3998.1% benign · 0 unsafe escapesen-GB54
F7 — MAR/eMAR administration-text (care-home charts · D-CC2)OFF — Designed (pre-build) · H-AI-90.9.0 · d3f0…aapending — eval + CSOeval-gate token-equiv pass-rate gates activationen-GB
F3 — patient summary (grounding validator §8.6)OFF — DPIA OQ-2grounding checken-GB
F6 — demand/ops insightsDelegation marker — StockIQ's live AI estate (deep-link). Never duplicated here (single-source-of-truth).

F5/F7 share the deterministic token-equivalence validator (any number/unit/drug/frequency/dose-round token added, dropped or substituted outside the versioned CSO-approved table ⇒ validator_rejected, §10) · F7 also never sets/invents a dose, timing, dose-round or PRN limit — the dispensing MAR-chart engine remains the source of the schedule and prints the deterministic-direction chart unchanged when F7 is off/down. Every call (and refusal) is logged with the post-redaction payload as sent — images included (F1 label-mask OCR) · no AI result ever gates a dispensing transition (AD-10).

Model + prompt registryplatform_adminai_model_registry · ai_prompt_registry
Per-feature model pins — ai_model_registry · one active row per feature
Featuremodel_idmax_tokenstimeouttemperaturetop_pseed
F1 accuracy visionclaude-opus-4-810248 s0 — forced1.042
F4 interaction-explainclaude-haiku-4-55126 s0 — forced1.042
F5 directions phrasingclaude-haiku-4-52565 s0 — forced1.042
F7 MAR/eMAR textclaude-haiku-4-52565 s0 — forced1.042
F2 clinical-note draftclaude-sonnet-4-5150012 s0.3 — CSO-set (warm)0.95
F3 patient summaryclaude-sonnet-4-5120012 s0.3 — CSO-set (warm)0.95
Prompt versions — ai_prompt_registry · append-only · semver + content_hash
FeatureServing semvercontent_hashcso_signoffEVAL-GATE evidenceState
F5 directions phrasing1.6.0c7e4…39✓ A. Sharief · 12 Juneval-run ev-5-220 gold v8 · pass-rate 98.1% · 0 unsafe escServing
F4 interaction-explain1.9.1a02c…11eval-run ev-4-118 severity-match 100%Serving
F1 accuracy vision1.4.28f3a…c2eval-run ev-1-091 recall 0.97 · FP ceiling ✓Serving (pilot/canary)
F7 MAR/eMAR text candidate0.9.0d3f0…aapendingeval-run ev-7-004 — pass-rate 96.4% (threshold 97%)Blocked — eval below floor + no CSO sign-off
F2 clinical-note draft2.1.04b91…7deval-run ev-2-204 schema + edit-distance ✓Serving
EVAL-GATE — F7 candidate 0.9.0 × claude-haiku-4-5
Gold setai_eval/F7/ · v3 (synthetic / pseudonymised)
Triple under testprompt 0.9.0 × claude-haiku-4-5 × temp=0/top_p=1.0/seed=42
Token-equivalence pass-rate96.4% floor 97% — fails
Unsafe escapes (adversarial)0
ResultFAIL — below CSO floor · activation rejected at API

Passing the offline gate is necessary, not sufficient — first live exposure is shadow/canary on an allow-listed cohort before estate-wide (§9.6).

CSO sign-off & SaMD links — required before flag-on (§9.2/9.3/9.4)
Hazard log (DCB0129)H-AI-9 (F7), H-AI-11
DPIA — F7 (per-feature)draft
SaMD device-boundary (OQ-4)determination pending — most-exposed of F2/F3/F5/F7
Registry auditai.registry_model_changed · ai.registry_prompt_version_activated

Activation rejected at the API until eval-pass and cso_signoff=true with the eval-run ref recorded — the run id + gold-set version + metrics surface in the activation audit event.

Changing any model/sampling/prompt is an audited admin action that re-triggers the §9.6 eval gate · the prior version is retained for reproduction · model deprecation by the vendor alarms (H-AI-8) · usage metering (per tenant×feature×day, est_cost, budget_state) lives on the AI console KPIs.

Care homes, wings & dose roundsD-CC2 · auditedconfig surface — writes via HomesApi.setConfig
Care homeTypeServing branchWingsResidentsMDS cycleRound dayeMARStatus
Oakwood Care Home CQC 1-2345678NursingTimperley21228-dayTuesdayCamascopeActive
Riverside Lodge CQC 1-9981234ResidentialTimperley1828-dayThursdayNoneActive
Elm Court CQC 1-4420071NursingSale3217-dayMondayPCSOnboarding

Per-home config changes emit pat.care_home_resident_changed via the owning API — dispensing re-plans MDS + regenerates MAR annotations, delivery re-plans per-wing rounds (AC-6). Wing must be one of the home's defined wings; a dose-round time edit re-anchors the cycle owner-side.

Oakwood Care Home — configNursingserving branch: Timperley
Home record
Home name
CQC location ID
Status
Linked branch
GP practice
Nurse-in-charge contact
Wings & dose-round times — round schedule per wing (G3)
WingResidentsDose-round times
Yellow Week6
Blue Week Blister6

Dose-round times drive MAR-round generation, picking output, and delivery per-wing round planning · changing a round time re-anchors the wing's cycle owner-side.

eMAR partner enablement — EmarPartnerApi.set · platform_admin
Partner
Connection state Connected · sharing consent on file

admin-config exposes the per-home enablement toggle only; the connector + its invariants are owned downstream (dispensing/integration). care_home_emar_sharing consent gates the feed (Designed; Planned until the partner connector ships).

MAR / MDS production parametersD-CC2 · auditedwrites via MarConfigApi.set
Estate production defaults
Cycle length
Blister / MDS format
Multi-week sheet
Print options
Picking list
Per-home MAR defaults
HomeCycleFormat
Oakwood28-day4-divisionValid
Riverside Lodge28-day4-divisionValid
Elm Court7-day7-division weeklyValid

Per-home defaults override the estate default · routes to the mar printer purpose (admin--printers default/fallback).

No adm_ table for MAR data — config surface only · every parameter change is an audited config event · cycle/blister coherence + MDS production invariants enforced in dispensing/patients.

Patient-comms config — estatesuperintendentauditedwrites via CommsConfigApi.set
Per-class monthly budgets & alert thresholds — comms_budget
Message classKindMonthly budgetAlert thresholdOn exceed
Collection / owingtransactional£1,20080%Alert & continue — never hard-capped
Appointment / clinical invitetransactional£80080%Alert & continue
MDS / care-hometransactional£60085%Alert & continue
Marketing / campaigncampaign£50090%Hard-stop at budget (PECR)
Quiet-hours window — defer, not suppress
Quiet from
Quiet until

Messages composed in-window are deferred to the next send-window — never dropped (OQ-C10 semantics).

Aggregation policy
Grain
Care-home default channel
Sender identity — platform_admin (regulated SMS sender ID)1 pending Notify onboarding
ScopeODSDisplay nameSMS sender IDReply numberStatus
Tenant defaultAllied PharmaciesAlliedRx07418 300921Registered
Branch: TimperleyFA512Timperley PharmacyTimperleyRx0161 980 5500Registered
Branch: SaleFA518Sale PharmacyPending Notify onboarding

Templates reference a sender_identity — never inline branding · an un-onboarded sender blocks £0 silent sends · contact-freshness max-age (PDS staleness for isContactable): 180 days.

Estate-level surface only — comms-patient owns the data + the I-7 invariant; this defers to CommsConfigApi.set and the comms budget_changed audit. Estate/region targeting via branch groups (§2.6b). No comms_budget row written directly here.

Config-change audit — DCB0129 inspectorread-onlyover audit_log config events
Date range
Change type
Scope
TimestampActor / roleScopeChangeBefore → AfterReason
14 Jun 09:42R. Okonkwo · platform_adminbranch: Timperleyflag ai.accuracy_visionoff → pilotCSO sign-off A. Sharief — F1 pilot
13 Jun 16:08L. Faulkner · superintendentestatecomms budget — marketing£400 → £500summer campaign uplift
13 Jun 11:20A. Khan · branch_managerbranch: Timperleyopening hours — Wed exceptionopen → 08:30–11:00 (stocktake)half-day stocktake 16 Jul
12 Jun 14:55R. Okonkwo · platform_adminestateflag pmr.dispense_drawdownoff → on (Altrincham)wave-2 cutover SQ-9
11 Jun 08:30L. Faulkner · superintendentestatesession policy — bench idle-lock15 → 10 minshared-PC security tightening
10 Jun 17:12system · schedulerbranch: Salestage routing — clinical checkbranch-only → branch or remotecentral-ops cover rota

Every config mutation carries actor + scope + before/after + reason + correlation id · rows are never deleted · stage-routing & auth-adjacent changes feed the DCB0129 change-control evidence the CSO consumes · the change-control rail (admin--config-changes) is itself the DCB0129 change-record for high-impact changes.

Config change-control railDCB0129 change-recorddraft → review → approve → scheduled → applied / rolled_back
Pending review
pending_reviewStage routing — Sale: accuracy check → branch or remoteauthored R. Okonkwo · awaiting second approverhigh-impact
pending_reviewComms budget — marketing £500 → £750 (estate)authored L. Faulkner · reviewer ≠ author requiredhigh-impact
Approved & scheduled
scheduledFlag — pmr.dispense_drawdown ON · region:north (4 branches)effective 23 Jun 06:00 · approved by superintendentstaged rollout
Applied
appliedSession policy — bench idle-lock 15 → 10 min (estate)applied 11 Jun 08:30 · L. Faulkner → R. Okonkwo
Rolled back
rolled_backComms quiet-hours 21:00 → 19:00 (estate)reverted 09 Jun — re-applied prior_value baseline (INV-C1)

Append-only lifecycle · prior_value captured at draft = the immutable rollback baseline (INV-C1); a roll-back is a forward change through the owning-module API, not a raw restore · low-impact changes (e.g. a printer default) may apply immediately where the role permits.

Change — Comms budget · marketingpending_reviewhigh-impact
Change record — adm_config_changes
TargetCommsConfigApi.set · budget[marketing]
Scopeestate (tenant)
Authored byL. Faulkner · superintendent · 14 Jun 08:10
Reviewerpending — must ≠ author
Effective aton approve (immediate) · or schedule
Reasonsummer campaign uplift
Correlation idcfg-8f12-44a1
Diff preview — prior_value → proposed_value
budget.marketing = £500 / month
+ budget.marketing = £750 / month
unchanged alert_threshold = 90% · on_exceed = hard_stop
Schedule effective_at (blank = immediate on approve)

The actual mutation goes through CommsConfigApi.set at the applied/effective_at transition · approve/schedule/apply/rollback are all audited (correlation id ties to the audit_log) · a rolled_back transition re-applies the captured prior_value through the same API (INV-C1).

Data-retention scheduleplatform_adminadm_retention_policies · audited
Record classExamplesStatutory basis (read-only)Floormin_retention (editable ≥ floor)Purge cadence
RC-PAT patient demographicspat record, prefs, consentsGDPR storage-limitation · NHS records-mgmt code10 y after last contact
y = floor
nightly archive sweep
RC-REG dispensing / Rx recorddisp supply events, labelsHMR 2012 reg 253 (2 y) · NHS code2 y
y lengthened
archive-to-Blob
RC-VET veterinary POM-Vvet supplies, owner recordVMR 2013 sch 3 (5 y, append-only)5 y
y = floor
archive-to-Blob
RC-CLIN clinical / CDS / servicescds_screenings, PGD, NMSdevice traceability · NHS code · CPA 11 y/25 y tail11 y
y lengthened (paeds tail)
archive-to-Blob
RC-AUD audit / AI / CD registeraudit_log, ai_request_log, CD regMDR 2001 (CD reg 2 y running) · disclosure-audit 8 y8 y
y = floor
partition lifecycle
RC-OPS operational rollupsai_usage_daily, rep rollupsno statutory floor — operational
y
nightly

Editing a class is an audited config event (actor + before/after + reason) · the class set + floors live in 05-data-model §4 (this reads them) · the governed §4.1 deletion process stays platform-ops-executed with legal-hold respected (OQ-A4: if ownership moves, this becomes a deep-link + audit view).

Branch groups & config-push targetingsuperintendentadm_branch_groups · selectors, not writers
Groups
GroupKindMembers
Pilot ringpilot_ringTimperley + 11
Region — North Westregion142
Care-home cohortops_cohort38 MDS-heavy
Wave-2 cutoverops_cohort18
Membership editor — Pilot ring
Timperley Altrincham Sale Wilmslow Stockport Hyde +6 more
Add branch
Group kind
Push targeting — apply a change to a group
Change to push
Target group
effective_at (staged rollout)
Expands to 12 per-branch changes → each via the owning-module API → 12 audit events

High-impact pushes carry the second-approver gate (INV-C2) · staged rollout: schedule pilot_ringregion:north → estate with distinct effective_at · feature-flag pilot + its branch_allowlist compose with group targeting (§2.6b). No group-level config row is written.

Delivery policiessuperintendent · effective-datedwrites via PolicyApi.set (delivery owns del_policies)
Attempt cap & reattempt
Attempt cap (then return)
Reattempt window
Round-generation lead (round_lead_days)
Empty-round dates still advance

Every attempt is an append-only del_attempts row — never overwritten (SM-D7).

Cross-cutting handover floors
Safe-place allowed
Force cold-chain temp-OK attestation
Same-day-return classes
Per-class evidence ladder — §2.3, rendered dynamically per stop's highest item class
Item classRecipient + GPSSignaturePhotoID-checkCold-chain blockAge-proof rung
Standard✓ alwaysoptionaloptionalnot required
Fridgerequiredoptionalnot requiredcontainer-id + temp_ok_at_handover
Controlled drug (Sch 2/3)requiredrequiredchecked_ok (collector / HCP block)
Age-restrictedoptionaloptionalnot requiredage_proof_attestation (verified / refused)

way_of_completion is constrained to the recipient type + ladder (e.g. left_safe_place/through_letterbox never valid for CD/fridge) · concentration thresholds (SM-D17 misuse detection: address_concentration_count, cd_concentration_count) are central-ops tunable here too · all blobs in Blob Storage, never data-URLs.

Operational thresholds — tunable vs statutory-fixed§2.7 · audited
Tunable lead-times — editable (owning-module config API)
WindowLives inValue
Rx void-sweep warning lead time (SM-8)dispensing config
days pre-warning before the EPS/Tariff void deadline
Owing chase/reminder cadencecomms / dispensing
days chase lead-times (the legal expiry below is fixed)
config_cache_max_age staleness banner threshold (§7)admin-config-owned
h below = informational · at/above = escalates
Statutory-fixed windows — read-only display + legal basis (not editable here)
WindowValueLegal basis
Rx expiry / dispense-by180 daysHuman Medicines Regulations 2012 / Drug Tariff read-only
CD owing / instalment window (SM-7)28 daysMisuse of Drugs Regulations 2001 read-only
Owing legal expiry180 daysEPS/Tariff-driven — the chase cadence above is tunable, this is not read-only

The editor labels each window: only the genuinely operational lead-times are editable; the statutory ones surface their citation so they cannot be edited by mistake (§2.7, AC-17).

AI usage & meteringplatform_admin / superintendentGET /api/ai/usage · ai_usage_daily
Tenant
Feature
From
To
Tokens in (MTD)4.18Mcached 2.71M · 65% hit
Tokens out (MTD)0.62M
est_cost MTD (billed)£41.20cap £150 · budget_state ok
Cache saving£18.40vs uncached-only estimate
DateFeatureRequeststokens_incached_incache_writecache-hittokens_outest_costbudget_state
14 JunF2 note draft122284,100198,8704,21070%61,200£3.81ok
14 JunF4 interaction-explain5441,04030,7801,10075%9,720£0.52ok
14 JunF5 directions5427,54022,03082080%5,940£0.31ok
14 JunF1 accuracy vision38389,12000n/a (image)11,400£2.14ok
13 JunF2 note draft118274,260189,4403,98069%59,400£3.69ok
13 JunF4 interaction-explain4937,24027,93098075%8,820£0.47ok
12 JunF2 note draft131304,830210,3004,40069%65,500£4.0780% threshold

tokens_in is the full input count and cached_tokens_in ≤ tokens_in · F1 is image-input (no prompt-cache hit) · per-tenant cost attribution + caps reflect the billed cache model (§8.5, AC-6) · the cache-hit ratio surfaces here so the §8.5 saving is visible.

AI request logplatform_adminai_request_log · monthly-partitioned
Feature
Status
Date
Correlation id
RequestTimeFeatureStatusPrompt ver · modeltokens (in/out)latency
req_558210410:41F1 visioncompleted1.4.2 · opus-4-83,184 / 965.9 s
req_558209910:38F1 visionredaction_blocked OCR found patient label1.4.2 · opus-4-8— / —0.4 s
req_558209010:35F2 notecompleted2.1.0 · sonnet-4-52,210 / 5404.1 s
req_558208110:31F2 noteunavailable_patient_excluded AI-objection (pre-redaction)2.1.0 · sonnet-4-5— / —0.1 s
req_558207710:28F5 directionsvalidator_rejected token added outside table1.6.0 · haiku-4-5312 / 881.2 s
req_558207010:22F4 interactioncompleted1.9.1 · haiku-4-5760 / 1801.6 s
req_558206110:14F2 noteunavailable_budget2.1.0 · sonnet-4-5— / —0.1 s

Full status enum: completed · unavailable_no_key · unavailable_flag_off · unavailable_patient_excluded · unavailable_timeout · unavailable_budget · unavailable_rate_limited · refused_by_model · validator_rejected · grounding_dropped · redaction_blocked · error · sampling params (temp/top_p/seed) are copied onto every row so a logged response is reproducible · retained RC-AUD.

Request — req_5582104 · F1 accuracy visioncompletedplatform_adminGET /api/ai/requests/:id
Post-redaction payload — exactly as sent — ai_request_log.request_payload
[product label visible: Amoxicillin 500mg caps · 21 · PL 12345/0001]
[████████ patient region masked ████████]
{ "feature": "F1", "image_ref": "redacted/req_5582104.jpg", "expected_amp": "Amoxicillin 500mg capsules", "expected_qty": 21, "patient": "PATIENT_A", "gp": "GP_B" }

Pseudonym tokens (PATIENT_A/GP_B); the re-identification map lived only in request scope and was never persisted (§8.2).

Audit metadata
statuscompleted
feature · flag_stateF1 · pilot (Timperley)
tenant / branch / userAllied · Timperley · Tom Mills (technician_act)
correlation_idcorr-disp-88412-acc → disp accuracy check
prompt_version · hash1.4.2 · 8f3a…c2
model_idclaude-opus-4-8
temperature · top_p · seed0 — forced · 1.0 · 42 (copied from registry, H-AI-11)
tokens_in / cached / out3,184 / 0 / 96
latency_ms5,912 ms (≤ 8 s timeout)
Status enum — what each terminal reason means
redaction_blocked residual identifier found post-redaction — blocked, logged, alarmed (never sent best-effort)
unavailable_patient_excluded patient AI-objection — fail-closed before redaction (§9.4a)
validator_rejected output added/changed a token outside the equivalence table (F5/F7)
Gate evidence & healthplatform_admin§9.2 / §9.4a / AC-9
Per-clinical-flag gate evidence
Feature / flagHazard-log idDPIASaMD device-boundaryPrivacy-noticeFlag-on ready
F1 accuracy visionH-AI-2 / H-AI-3signedOQ-4 — closest to boundary (in/out pending)updatedpilot only
F4 interaction-explainH-AI-5signedOQ-4 — attaches to cds device outputupdatedon
F5 directionsH-AI-6signedadmin/record-keeping rationaleupdatedon
F7 MAR/eMARH-AI-9draftOQ-4 — most-exposed of F2/F3/F5/F7pendingblocked — eval + CSO + DPIA
F3 patient summaryH-AI-4OQ-2 free-textrationale pendingpendingblocked — structured-fields-only until OQ-2/8
Availability / health — unavailable breakdown (today)
Unavailable reasonCount
unavailable_patient_excluded AI-objection, pre-redaction4
unavailable_flag_off61
unavailable_budget1
unavailable_rate_limited0
unavailable_timeout2
redaction_blocked alarmed2
Per-patient AI-objection rate 0.9% of eligible patients — gateway fails closed for every feature on those patients (§9.4a.2)

Every unavailable is indistinguishable from flag-off to the workflow (AD-10) — no human step is removed.

Draft acceptance / edit KPIs — ai_drafts (H-AI-4 telemetry)
FeatureDraftsAccepted as-isEdited then acceptedRejectedMedian edit-distance
F2 note12238%54%8%0.12
F5 directions5471%24%5%0.04
F3 summary (off)

A draft never auto-transitions to accepted — mandatory edit-review (no one-click accept from a collapsed card) · high reject-rate or rising edit-distance re-gates the prompt/model at the next CSCR review (H-AI-4) · accepted content lives on in the owning module's record, never only in ai_drafts.

PINCER prescribing-safety indicatorsUKCA Class I device boundaryref_cds_pincer_indicators · cds.listIndicators()
Indicator set versionpincer v62026 PRIMIS/PINCER release
Dataset healthhealthy · stale after 25 Aug
Indicators active13
Evaluations (30d)9,412flagged 188
Indicator list — ref_cds_pincer_indicators (criterion logic keyed off dm+d / SNOMED)
CodeTitleAt-risk criterionSeverityFlagged (30d)
PINCER-ANSAID without gastroprotection in peptic-ulcer historyNSAID + ulcer Hx, no PPI co-prescriptionhigh41
PINCER-BNSAID in heart failureNSAID + HF diagnosishigh22
PINCER-CAntiplatelet + anticoagulant without gastroprotectionwarfarin/DOAC + aspirin/clopidogrel, no PPIhigh17
PINCER-DWarfarin/DOAC + NSAIDoral anticoagulant + NSAIDwarning14
PINCER-EBeta-blocker in asthmanon-selective beta-blocker + asthmawarning26
PINCER-GACEi/ARB without U&E monitoring (15m)ACEi/ARB + no recorded U&E in 15 monthswarning33
PINCER-KMethotrexate without recent FBC/LFT monitoringMTX + no FBC/LFT in windowhigh9
Evaluation lookup — cds_indicator_evaluations (traceability, append-only)
Indicator
Patient / run ref
 
EvaluationIndicatorPatientEvaluatedIndicator verFlaggedSubjects / evidence
ie_44120PINCER-ASusan Bell (72)09 Jun 10:42pincer v6flaggednaproxen 500mg + peptic-ulcer Hx (SNOMED 13200003), no PPI · run_ref ps-0612
ie_44119PINCER-GSusan Bell (72)09 Jun 10:42pincer v6not flaggedU&E recorded 02 May 2026 (within 15m)
ie_43880PINCER-AJohn Okafor (61)08 Jun 14:10pincer v6not flaggedno NSAID active

Append-only, deterministic: same patient inputs + pinned ref_cds_pincer_indicators version ⇒ same flagged set (CDS-AC-8) · no workflow/outcome columns here — the intervention record lives in clinical-services · activating a new indicator-set version is a platform_admin device-change (audited, on ops--cds).

CDS dataset-staleness status-bar chipDesigned — status-bar surfacecds.datasetStatus()
Status-bar chip states — mirrors the NHS-session chip pattern (§5/§7)
CDS datasets fresh · 2026.05

Fresh — all 8 ref_cds_* slices within the freshness threshold; informational only.

CDS dataset 9d old — verify

Stale (amber) — cached slice older than the configurable threshold; screening still runs but raises the amber "screened against vX as of T — verify" acknowledgement (offline, §7/§10).

CDS unavailable — slice missing

Unavailable (red) — a required slice (esp. ref_cds_severity_map) absent; screening fails closed and dispensing blocks clinical-check approval (CDS-AC-2/11).

Wiring
Chip reads cds.datasetStatus() (dataset · version · loadedAt · staleAfter · healthy) — same source as the ops--cds console
Staleness threshold is the configurable age — operator-tunable (config_cache_max_age / dataset age)
Stale beyond threshold also raises a cds.unavailable-class staleness alarm to ops (never a silent pass — §10)
Click-through opens the CDS dataset console for the version/health detail

The chip is a presentation surface only — it never changes the fail-closed gate (dispensing fails safe on its own stale-record rules); it mirrors the NHS-session chip so the same shell status-bar pattern carries the device-dataset health signal.

eRD management38 active regimens · Timperley
Active regimens38
Next issues due (7 days)6
Authorisations expiring ≤30d3
Prescriber cancellations1
Action needed 2
D. LloydRamipril, bisoprolol · 28-day intervalIssue 3 of 6Issue 4 cancelled by prescriberauth expires 02 Oct 2026
Mary QuinnLevothyroxine 100mcg · 28-day intervalIssue 6 of 6Final issue — re-authorisation neededauth expires 30 Jun 2026
Next issue due soon 3
John OkaforMetformin 500mg, lisinopril 10mg · 28-day intervalIssue 2 of 6Issue 3 scheduled — due 26 JunClaims sequential ✓auth expires 14 Nov 2026
Ahmed HassanBeclometasone inhaler, montelukast · 56-day intervalIssue 4 of 7Issue 5 due 18 JunClaims sequential ✓auth expires 19 Mar 2027
Eleanor WrightLatanoprost eye drops · 28-day intervalIssue 5 of 12Issue 6 due 15 JunClaim issue 4 pendingauth expires 08 Jan 2027
Scheduled — not yet due collapsed on the queue board · 4
Susan BellAtorvastatin 20mg · 28-day intervalIssue 3 of 6Auto-arrived 09 Jun — moves to Received 21 Junauth expires 12 Dec 2026
George AdamsTamsulosin 400mcg MR · 28-day intervalIssue 2 of 6Auto-arrived 10 Jun — moves to Received 24 Junauth expires 03 Nov 2026

Spine pushes the next issue 7 days before the expected end of the previous issue — auto-arrived issues sit in the collapsed “Scheduled — not yet due” group so benches are not flooded, and move to Received on due date. DN withdrawals carry the eRD issue identifier. Cancellation of unpulled issues arrives from Spine and is surfaced here, never silently dropped.

eRD regimen — John OkaforIssue 2 of 6Authorisation active
Issues2 of 6 pulled
Interval28 days
Next issue expected26 Jun prev end − 7d
Authorisation expires14 Nov 2026
Issue history & sequential-claim state
IssueEPS IDArrivedDispensingDNClaim
1 of 67B22C414 AprCollected 17 AprSentClaimed May
2 of 69D45A112 MayClinical checkPendingAwaits issue-1 sequence ✓
3 of 62F88B0auto — 19 JunScheduled · due 26 Jun
4–6not yet pulled
Claims for eRD issues submit in sequence — the issue-2 claim queues until the issue-1 claim is accepted. Out-of-order submission is blocked, not retried blind.
Authority
Authorising Rx 7B22C4-X81004-90DD13 · Dr R. Mehta (Park Road Surgery A81021) · signed 12 Apr 2026
6 issues × 28 days · expires 14 Nov 2026
Items on each issue
Metformin 500mg tablets ×561 bd
Lisinopril 10mg tablets ×281 om
Patient
John Okafor · 58 · NHS 612 338 4790 PDS ✓
Nominated here · RTEC: PPC valid to Feb 2027
Cancellation watch
A prescriber cancellation of any unpulled issue (3–6) lands here as an action item and stops the auto-pull.
Labels & print queueTimperley · 09:47
Queued6
Printing1
Failed2
Reprints today (audited)4
Queue (7)Failed (2)Advisory labelsReprint auditCompleted today (212)
JobKindForPrinterRequestedStatus
J-4471Item label ×3Margaret Thompson — amlodipine, atorvastatin, levothyroxineLBL-0209:46 · T. MillsPrinting
J-4472Bag labelMargaret Thompson Large printLBL-0209:46 · T. MillsQueued
J-4473Token — FP10DTC. Reilly — Sch 2 CD collection signatureA4-0109:45 · A. KhanQueued
J-4474MAR chartOakwood batch — 12 residents, cycle 16 JunA4-0109:44 · T. MillsQueued
J-4475MDS tray label ×4Harold Jenkins — trays wk 1–4LBL-0209:44 · T. MillsQueued
J-4476Owing labelSusan Bell — warfarin 3mg, 14 owedLBL-0209:43 · T. MillsQueued
J-4468Item label ×2Leon Murphy — sertraline, salbutamolLBL-0109:41 · T. MillsFailed — media out
J-4467Token — exemption declarationDerek ShawLBL-0109:40 · T. MillsFailed — media out
Reprint audit — reason mandatory on every reprint
TimeLabelKindReprinted byReason
09:32Priya Patel — methylphenidate item labelItemT. MillsLabel creased in printer feed
09:18Ahmed Hassan — bag labelBagT. MillsBag torn at sealing — relabelled new bag
08:55C. Reilly — FP10DT tokenTokenA. KhanPatient lost token — identity re-verified before reissue
08:41Oakwood — Vera Singh MAR chartMAR chartA. KhanSuperseded by mid-cycle dose change (ramipril)

Reprints render from the stored payload (hash-matched) — never silently re-derived. Each row records printer id, actor and reason; GPhC inspectors expect this trail.

Cautionary & advisory labels — Susan Bell · Warfarin 3mg tabletsdm+d-keyed · BNF Appendix
No.Warning textSourceState
10Warning: follow the printed instructions you have been given with this medicine.Auto (dm+d)Applied
5Do not take indigestion remedies, or medicines containing iron or zinc, at the same time of day as this medicine.Auto (dm+d)Applied
Tell your doctor straight away if you notice unusual bruising or bleeding (warfarin counselling).Pharmacist-added · A. KhanManual add
21Take with or just after food, or a meal.Auto (dm+d)Removed — A. Khanreason: not applicable to this formulation
Each add/remove records added_or_removed_by + reason in disp_labels.advisory_labels.

Reprint fidelity (AL-3): the exact ordered set printed (auto + pharmacist edits) is snapshotted on the label; reprints render from that snapshot — never silently re-derived against a newer reference version. The set is versioned with the dm+d read-model snapshot, so a stale catalogue surfaces in the UI (AP-4 honesty), not silently (AL-4).

Statutory content checked at render: patient name (MDS: outer + immediate packaging) · supplying pharmacy name/address — always the SPOKE’s even when printed at a hub · date ready + hub assembly date on hub-printed labels · “Keep out of the reach and sight of children” on every label · CD quantities in words and figures (Sch 2/3).

MDS profile — Margaret ThompsonActive Oakwood Care Home
Cycle length *
Trays per cycle
Slot scheme
Start anchor date
Collection mode
Care home
Medication grid — slot map (day × slot → dose)
Medication (dm+d)DirectionsMorningLunchEveningNightIn traySource Rx
Amlodipine 5mg tabletsOne in the morning1Tray9A3F2E
Levothyroxine 75microgram tabletsOne 30 min before breakfast1Tray9A3F2E
Furosemide 20mg tabletsOne in the morning — not after lunch1Tray4C19D8
Adcal-D3 chewable tabletsOne twice daily11Tray4C19D8
Atorvastatin 40mg tabletsOne at night1Tray9A3F2E
Glyceryl trinitrate 400microgram spray1–2 sprays PRN under tongueOriginal pack — MAR only4C19D8
+ add medication…
Tray label and MAR chart both list every line — original-pack items appear on the MAR with “not in tray” marking. Patient name prints on outer and immediate packaging (multiple-dosage statutory rule).

Profile changes are audited (actor + before/after) · next cycle generates from this profile on the anchor schedule · accessible-information needs (large print) carry through to tray + MAR rendering.

MDS cycle — Oakwood Care Home · 16 Jun – 13 JulAssembling
Residents in batch12
Cycles ready5 of 12
Trays flagged for regeneration2
MAR charts printed9 of 12
Per-resident preparation status
ResidentRoomTraysStageFlagsMAR
Margaret Thompson44 × weeklyAssembling TMPrinted
Harold Jenkins74 × weeklyClinical check AKPrinted
Vera Singh24 × weeklyTray regenerationWk 1 checked tray flaggedReprint queued
Arthur Pemberton114 × weeklyAccuracy check TMPrinted
Doris Whitfield94 × weeklyReadyPrinted
Stanley Hughes144 × weeklyReadyPrinted
Edna Kowalski64 × weeklyPlanned — scripts dueAwaiting eRD issue
+ 5 more residents ready…

Stage chain per cycle: planned → assembling → clinically checked → accuracy checked → ready → collected/delivered. Clinical and accuracy stages carry the same gates as the main queue (separate attribution, pharmacist-only approval).

Mid-cycle change log
LoggedResidentChangeTypeEffectiveAuthorised byTray impact
10 JunVera SinghRamipril 2.5mg → 5mgDose change12 JunDr R. MehtaWk 1 flagged · wk 2–4 regenerated
08 JunHarold JenkinsDocusate 100mg stoppedStop16 JunDr A. OseiNext cycle only
05 JunDoris WhitfieldAlendronic acid 70mg weekly startedStart16 JunDr R. MehtaBuilt into this cycle
Batch & handoff
Due window 13–15 Jun · 48 trays + 12 MAR charts · deliver to Oakwood with driver Sam Doyle
Batch: in production
Source prescriptions
EPS linked31
eRD issues awaited1
Paper FP102
On batch-ready
Emits to delivery (round booking) and comms (care-home notification) automatic

Tray labels and MAR charts print via the labels queue with full reprint audit · MDS tray + MAR chart are label kinds in the same audited pipeline · collected/delivered closes each member cycle.

NMS intervention — Susan Bell (72)Anticoagulation (VTE)Content pack NMS-2026-04 (pinned)Pharmacist only
Engagement ✓InterventionFollow-up
Engagement — Tue 9 Jun, in pharmacy · consent recorded A. Khan
New medicine: Apixaban 5mg tablets ×56 — started 2 Jun (switch from warfarin)dm+d VMP
Have you started taking the new medicine? *
Missed doses in the last 7 days? *
Any side effects or concerns? *
Problems obtaining or using the medicine?
Information needs identified
Modality *
Suspected adverse reaction → Yellow Card hand-off (YC-1/YC-3, §2.11)
A side effect reported at follow-up offers a one-tap MHRA Yellow Card, pre-populated from the consultation — distinct from an LFPSE incident (YC-3). The offer-and-choice is auditable: a declined report is visible, never invisible (YC-2). In person or live audio/video only — text/chat may supplement, never replace. Out-of-window reason: patient requested early call before holiday (audited).
Outcome
Intervention outcome *
Matters identifiedSide effect — discussed
Adherence support agreedYes — reminder chart
GP referral (gp_referral_sent → clin_gp_notifications rail)
Add pharmacist intervention (clin_interventions, §2.2)
Terminal actions
Three terminals: Complete · Save & schedule follow-up · lost-to-follow-up (records the contact-attempt log, claims nothing for the missed stage — no payment for uncontactable patients). Distinct from lapsed (window expiry) and dna (no-show).
Follow-up scheduling
Window: intervention + 14–21 days26 Jun – 3 Jul
Preferred: phone, after 2pm
Claim position
£14 intervention + £14 follow-up (max £28) · no payment for uncontactable patients · cap headroom 31 of 38 (0.9% of monthly items 2026/27 — warns, never blocks)
Claim item on completion

EP-6: one active NMS per therapeutic area; a decline in the last 3 months suppresses re-identification. Remote delivery records the remote performer; the claim stays with the originating branch (EP-7).

Discharge Medicines ServiceEssential service — every branch · stages deliverable by pharmacist or technician
Stage 1 — in 72 h window2
Stage 2 due (Rx received)1
Stage 3 awaiting collection2
Completed this month6 · £198
Stage 1 — receive & reconcile within 72 h 2
Ahmed HassanManchester Royal Infirmary · discharged 10 Jun · NHSmail PDFNHSmail25 h left
Margaret ThompsonWythenshawe Hospital · discharged 11 Jun · Oakwood care homePharmOutcomesDue Mon 15 Jun (Sun closed-day excluded)
Stage 2 — first post-discharge prescription check 1
Karen Doylefirst Rx received today 09:31 · discharge-vs-PMR diff readydisp.prescription_receivedVerify changes
Stage 3 — patient consultation at first collection 2
Eleanor Wrightmeds ready · awaiting collectionAIS: deafblind — comms supportReady
D. Whittakerstage 2 complete 10 Jun · collection expected todayReady
Completed 1 this week
R. Salimall 3 stages complete 11 Jun (T. Mills, ACT)£35 claim-ready

Intake today: PharmOutcomes / Refer to Pharmacy / NHSmail (native MESH ToC rail — OPEN QUESTION) · partial fees £12 / £11 / £12, complete £35 · claim by the 5th of the month after completion (6th after a bank holiday).

DMS — Karen Doyle (67)Wythenshawe Hospital · discharged 9 JunStage 2 in progress
Stage 1 — receive & reconcile
Referral 9 Jun 14:20 · reconciled 10 Jun 11:42 by T. Mills (ACT) — within 72 h
Complete · £12 partial secured
Stage 2 — first Rx check
First post-discharge FP10 received 12 Jun 09:31 · verify against discharge summary before supply
In progress · £11
Stage 3 — patient consultation
At first collection · check understanding of changes
Pending · £12
Medicines reconciliation — discharge summary vs PMR repeat
Each diff line carries a structured discrepancy type (source taxonomy, §2.4) beyond the green/amber/red colour — tick a flagged line to feed the GP-referral template.
MedicineDischarge summaryPMR (pre-admission)Discrepancy typeStatus
Atorvastatin 40mg tablets40mg ON40mg ON— none —Match
Lansoprazole 30mg capsules30mg OM30mg OM— none —Match
Ramipril 10mg capsules10mg OM — dose increased5mg OMchangeDose/freq changed
Bisoprolol 2.5mg tabletsNEW — 2.5mg OMnot on PMRadditionNew medicine
Furosemide 40mg tabletsnot on discharge40mg OM — on GP repeatomissionOmitted on discharge
Bendroflumethiazide 2.5mg tabletsSTOPPED on discharge2.5mg OM — still on GP repeatduplicationDiscrepancy
Taxonomy: addition on discharge not on PMR · change dose/form/frequency · omission PMR medicine absent from discharge · duplication overlapping medicines.
GP-referral template — auto-populated from flagged discrepancies (§2.4.2)
To (GP practice)
Route
Auto-populated discrepancies
changeRamipril 10mg OM — dose increased from 5mg on discharge
additionBisoprolol 2.5mg OM — new on discharge, not on GP repeat
omissionFurosemide 40mg OM — on GP repeat, absent from discharge summary
duplicationBendroflumethiazide 2.5mg OM — stopped on discharge but still on GP repeat (withheld today)
Pharmacist recommendation *
"Flag to GP" (header) opens this template; sending creates the referral as a clin_documents record and a clin_gp_notifications row tracked on the GP-notification queue with the day-of/next-working-day SLA. No discrepancy is marked communicated without an evidence row.
Partial-fee rule (CL-6)
An episode terminating before stage 3 claims the completed-stage partials — £12 (S1) / £11 (S2) / £12 (S3) — never £35. All three stages complete = £35. From 1 Jul 2024, submissions within 3 months of deadline are accepted but unpaid.

72 h window excludes configured closed days · stage 2 is triggered by the first prescription received after the discharge date (verify-before-supply) · all stages pharmacist- or technician-deliverable.

BP clinic — Hypertension case-findingNICE NG136 thresholds (content pack)
Today's clinic 3
Gordon Fairley · 58clinic check in progress · no hypertension diagnosisCapturing
Eleanor Wright · 69booked 11:40AIS: deafblind — comms supportBooked
M. Iqbal · 54ABPM fit 14:30 with T. MillsABPM fit
ABPM out 1
R. Kaur · 47ABPM-01 fitted 11 Jun · return today 16:00Return due
Escalated 1
S. Mensah · 61184/122 at 10:12 — same-day GP referral made, GP phoned≥180/120

Eligibility: adults 40+ without a hypertension diagnosis (+ ad-hoc GP-requested measurements for any adult) · delivery by suitably trained staff — not pharmacist-only · fees £10 clinic / £50.85 ABPM.

Clinic capture — Gordon Fairley (58)
Reading 1 (seated)
Reading 2 (seated)
Reading 3 (seated)
Average (readings 2 & 3, auto)146 / 92 mmHg
DeviceBP-01 · Omron HEM-907 · BIHS ✓ · cal 02/2027
<140/90 — reassure, advise re-check within 5 yrs
140/90 – 179/119 — offer ABPM Selected
≥180/120 — same-day GP referral
ABPM handoff
Issue ABPM-01 (A&D TM-2430 · BIHS ✓ · cal 09/2026)
Daytime average thresholds<135/85 normal · 135/85–149/94 GP — suspected · ≥150/95 GP — likely
Result to GPGP Connect Update Record · day-of / next working day
Fees£10 clinic · £50.85 ABPM
Contraception service (PCS)initiation · continuation · oral EC (29 Oct 2025)
Initiations this month6 · £150
Continuations11 · £275
Oral EC supplies4 · £80
GP notifications pending2
Initiation (£25) 1
N. Adeyemi · 27COC requested (Rigevidon) · BP + BMI checks in progressIn consult
Continuation (£25) 2
F. Osei · 31drospirenone 4mg · 6×28 resupply duePGD added 29 Oct 2025Booked 15:20
C. Lindqvist · 24desogestrel 75mcg · 12-month reviewInvited
Oral EC (£20) 1
Priya Patel · 33levonorgestrel 1.5mg · walk-inSame-day

Registration requires offering both initiation and continuation · contraception supplies are free to the patient (no prescription charge) · PF fixed payment bundling depends on PCS + HCF registration.

Initiation wizard — N. Adeyemi · COC (Rigevidon)
Blood pressure *
Weight
Height
BP sourceMeasured · BP-01
Weight / height sourceSelf-reported — flagged
BMI (auto)24.1
NG136-aligned BP/BMI checks for COC Pass
Migraine with aura (exclusion)No
Smoking statusNon-smoker
SupplyRigevidon ×3 cycles · PGD v3 · free to patient
Performer
Self-reported observations are acceptable when clinically judged suitable and are stored with the self_reported flag — rendered as such in the Update Record payload.
Oral EC — Priya Patel (33) · levonorgestrel 1.5mg
Patient age ≥ 16 — competence assessment not triggeredGillick/Fraser n/a
Time since UPSI · weight / BMI (UPA vs LNG choice)36 h · 71 kg
Supplylevonorgestrel 1.5mg · PGD v1 · free to patient
Emergency contraception — “A.B.” (15)levonorgestrel 1.5mg · PGD v1PCS content pack v3 (pinned)Competence/safeguarding pharmacist-held
Gillick competence / Fraser guidelines (mandatory under-16 step)
Understands the advice givenYes
Cannot be persuaded to inform parent / allow pharmacist to informDeclines — recorded
Likely to continue/start intercourse with or without treatmentYes
Physical/mental health likely to suffer without treatmentYes
Best interests to receive treatment without parental consentYes
Competence outcome *
not_competent blocks PGD supply (server-side, EP-5) and routes to the content-declared safeguarding/referral path. Fraser criteria & age thresholds are content-pack data (SG-1).
Safeguarding assessment & outcome
Age of partner / coercion / exploitation indicatorsConcern present
Safeguarding concern Positive — supply blocked
Outcome *
Raise incident (compliance incident.record)
Safeguarding referral document
A positive concern forces the safeguarding-referral outcome and raises an incident via compliance’s incident.record() (§2.3.4). The competence/safeguarding judgement is pharmacist-held even where technician delivery is enabled.
CDS safety screening — levonorgestrel 1.5mg (PGD candidate)
Same regulated cds.screen() output as dispensing’s clinical check — stacked, colour-coded decision-support cards, each showing its dataset version. Advisory to the pharmacist; the PGD/supply decision and its audit stay with this wizard. A severe alert blocks supply (no silent pass); a recorded safeguarding concern blocks independently above.
Warning — Interaction · reduced efficacy
Enzyme-inducer on the medication set — carbamazepine 200mg (epilepsy) accelerates levonorgestrel metabolism (CYP3A4 induction · drug–drug). Double-dose LNG (3mg) or copper-IUD onward referral advised per content pack.
FDB interactions v126 · evidence key DDI-LNG-CBZ · not yet acknowledged
Allergy — no coded contraindication
No coded allergy to levonorgestrel or excipients on pat_allergies. Any uncoded free-text allergy note is surfaced verbatim below the cards — not a machine-cleared result.
allergy / cross-sensitivity v89
Duplicate therapy — none
No same-class or same-active duplicate against the current medication set (no other hormonal contraceptive recorded).
duplicate v41
Pregnancy / lactation — not screened
pregnancy v18 · lactation v18
Dose within range
Levonorgestrel 1.5mg single dose within the licensed oral-EC range · renal/hepatic not evaluated (no eGFR on record).
dose v54

Screened by cds module · FDB Multilex 2026.05 — interactions v126, allergy v89, dose v54, duplicate v41, pregnancy v18, lactation v18 (per-card version shown above) · severity map v12 · result snapshot retained (device traceability). Fail-closed: a missing dataset slice blocks supply, never reads “no alerts”.

Smoking cessation (SCS)NHS-trust referral only
Active programmes7
4-week quits (CO-validated)3
NRT items this month18 · Drug Tariff
Fees accrued£230
Referral received 1
T. Carragher · 49Wythenshawe respiratory ward · referred 10 JunNHSmailBook first consult
First consultation (£30) 1
John Okafor · 57quit date set 15 Jun · NRT patches + gum startedWeek 1
Interim reviews (£10) 2
D. Szymanska · 38week 2 · CO 11 ppm ↓ from 22Week 2
K. Boateng · 45week 3 · DNA Tuesday — rebookedRebooked
Final — 4-week quit (£40) 1
F. Hartley · 52week 4 · CO validation due todayCO check
Continuing NRT (to week 12) 2
M. Rowan · 60week 7 · patches step-down to 14mg/24hWeek 7
CO validation — F. Hartley (week 4)
CO reading *
Device
Previous readings22 → 11 → 4 ppm
Quit status Quit validated (<10 ppm)
Device calibrationdue 08/2026 · in service
NRT supply
Nicotine 21mg/24h patches ×14free to patient
Nicotine 2mg medicated chewing gum ×210free to patient
Reimbursementper Drug Tariff determination
Stock draw-downpmr.service_supply → StockIQ

Programme: first → interim(s) → final at ~4 weeks, CO-validated; NRT support continues to week 12 · £1,000 setup at registration · MYS SCS API in development (PharmOutcomes live in beta) · Dec 2025 draft widening — commencement TBA.

Private services — travel health consultationprivate_travel · invoice output (no MYS)
Traveller — Ahmed Hassan (34)
Destination *
Departure
Duration
Activities
Medical history
Previous travel vaccines
Risk assessment (NaTHNaC-style)
Malaria — chemoprophylaxis indicated (rural Kenya)High risk
Rabies — animal contact risk, course advisedAdvised
Hepatitis A — booster dueAdvised
TyphoidAdvised
Yellow fever — certificate not required (direct travel)Not required
Bite avoidance — DEET 50%, netsAdvice given
Rabies course — multi-dose schedule (generic stage model)
Dose 1 — today 12 Jun Given
Dose 2 — Fri 19 Jun 10:15Booked
Dose 3 — Fri 3 Jul 10:15 (day 21)Booked
Content-declared intervals (day 0 · 7 · 21–28) — same episode engine, wizard, supply and audit machinery as NHS services; no NHS assurance gate.
ItemSchedulePriceStatus
Hepatitis A (Havrix Monodose)booster — single dose today£58.00Accepted
Typhoid (Typhim Vi)single dose today£36.50Accepted
Rabies (Rabipur) ×3day 0 · 7 · 21–28£85.00 / doseAccepted — stages booked
Atovaquone/proguanil 250/100mg ×261–2 days before until 7 days after£54.00Accepted
Invoice total£403.50

Private services are configurable definitions in the content registry — eligibility rules, consultation schema, PGD set, private fee schedule · supplies emit pmr.service_supply draw-down events.

GP notifications queueGP Connect Update Record (ITK3 over MESH) · NHSmail fallback
Due today4
Overdue SLA1
Failed — retrying1
Manual action required1
PatientService / episodeCompletedChannelDue by (SLA)AttemptsStatus
Daniel PrycePF — sore throat · PGD supplytoday 10:41gp_connect_urDay-of · 17:000Pending
S. MensahHCF — 184/122 same-day referraltoday 10:12gp_connect_urSame-day — GP also phoned1Sent
Gordon FairleyHCF — clinic 146/92, ABPM offeredtoday 11:25gp_connect_urNext working day · Mon 15 Jun0Pending
N. AdeyemiPCS — COC initiationtoday 12:05gp_connect_urDay-of · 17:000Pending
R. KaurHCF — ABPM daytime avg 137/8611 Jun 16:10gp_connect_urMet SLA1Delivered · ITK3 ack 16:42
L. ChenPF — UTI · PGD nitrofurantoin11 Jun 13:50gp_connect_urOverdue — was due 11 Jun4Failed — MESH timeout
B. HughesPF — otitis media10 Jun 15:22nhsmail_fallbackFallback path5Fallback sent
T. O'NeillPF — impetigo9 Jun 11:08nhsmail_fallbackBounce — practice mailbox full6Manual required

Failure path: pending → failed (retry with backoff in nhs_message_queue) → fallback_sent (NHSmail) → manual_required, with a task at each step. No episode is ever marked notified without an evidence row. The SLA clock keeps counting during outages and escalates.

PGD & clinical device registryTimperley
PGDsPractitioner sign-offsClinical devices
PGDServiceVersionEffectiveExpirySign-offsStatus
Phenoxymethylpenicillin (sore throat)PFv41 Oct 202503/20278 of 9Active
Nitrofurantoin (UTI)PFv21 Oct 202509/20266 of 9Expires in 3 months
Aciclovir (shingles)PFv31 Oct 202503/20278 of 9Active
Fusidic acid 2% (impetigo)PFv331 Jan 202401/2026Expired — supply blocked (fail-closed)
Desogestrel 75mcgPCSv329 Oct 202510/20275 of 9Active
Drospirenone 4mgPCSv129 Oct 202510/20275 of 9Active
Levonorgestrel 1.5mg (oral EC)PCSv129 Oct 202510/20275 of 9Active
Practitioner sign-offs
Aisha KhanPharmacist (RP) · GPhC 206123412 of 12 PGDs signed
Tom MillsTechnician (ACT) · PCS PGDs from 29 Oct 20253 of 3 signed
R. Osei (locum)GPhC 2207851 · booked Sat 13 Jun0 of 12 — sign-off required before supply
clin.content_activated invalidates the cached per-practitioner PGD competency (staff ST-4) — re-sign-off is required on each new PGD version.
Clinical devices
DeviceTypeMake / modelBIHSCalibration dueStatus
BP-01Clinic BP monitorOmron HEM-907✓ evidence on file02/2027In service
ABPM-01ABPMA&D TM-243009/2026In service
ABPM-02ABPMA&D TM-243005/2026Calibration overdue — capture blocked
CO-01CO monitorBedfont Smokerlyzer piCOn/a08/2026In service
HCF requires BIHS-validated monitors. Observation capture against an out-of-calibration device is blocked, raising a branch recalibrate/replace task.

Expired or withdrawn PGDs block supply fail-closed · every PGD supply records the PGD id + version (immutable provenance) · registration prerequisites (otoscope, BIHS devices, CO monitor) are content-registry data (CC-7).

Stock counts — TimperleyPerpetual inventory
Coverage (counted ≤90d)76%target 85% · fleet dashboard
Sessions this week42 complete · 1 in progress
Lines counted (June)412
Net variance (30d)−£38.2011 lines adjusted
SessionsWorklist (what to count next)Variance summary
SessionArea / shelvesStartedCounted byLinesVarianceStatus
CNT-0612-02Dispensary W1–W4today 09:05Tom Mills (ACT)34 / 48−3 unitsIn progress
CNT-0612-01CD cabinettoday 08:40Aisha Khan (RP)18 / 180Complete — RP witnessed
CNT-0611-03Fridge11 Jun 16:20Tom Mills (ACT)12 / 12+1 (Lantus SoloStar)Awaiting review
CNT-0610-02OTC fixture F210 Jun 14:05Beth Hughes56 / 56−1 unitComplete
Ranked worklist (C1/C2)
Next to count: Warfarin 3mg ×28 (high usage, confidence Med) · Methylphenidate 10mg ×28 (CD, 41 days since count) · Salbutamol inhaler (owing-linked) · Lansoprazole 30mg ×28 · Adcal-D3 chewable ×112

Counts SET on-hand via the branch stock ledger · ranked worklist favours high-usage / low-confidence lines · count confidence feeds the on-hand trust gate in ordering suggestions · fleet coverage tracked centrally.

Count session CNT-0612-02 — Dispensary W1–W4In progressTom Mills (ACT)
Progress34 / 48 linesshelf W3 in progress
Variances so far3net −3 units
Value impact−£8.58
Started09:05elapsed 1h 12m
ShelfProductExpectedCountedVarianceNote
W1Amlodipine 5mg tabs ×2814140
W1Amoxicillin 500mg caps ×2152−3checked owings tub — not there
W2Warfarin 3mg tabs ×2845+1extra pack behind divider
W2Bisoprolol 2.5mg tabs ×28990
W3Atorvastatin 40mg tabs ×286entering…
W3Ramipril 5mg caps ×2811not counted
W4Lansoprazole 30mg caps ×287not counted

Variances above the threshold flag the session for review before posting · CD lines are counted under RP witness, with the register balance reconciled in the PMR · adjustments are idempotent on the session id.

Inter-branch transfers — Timperley
In transit3
Awaiting our receipt2
Sent this month£612.4014 transfers
Open discrepancies1
TransferFrom → ToLinesValueSentStatus
TRF-0612-01Timperley → Altrincham4£36.10today 10:05 · van (Sam Doyle)In transit
TRF-0611-04Sale Moor → Timperley2£18.4211 Jun 15:30Awaiting receipt
TRF-0611-02Timperley → Urmston6£54.9011 Jun 09:15Received 11 Jun 14:02
TRF-0610-03Stretford → Timperley3£27.6510 Jun 11:40Discrepancy — 1 short
Receive TRF-0611-04 — from Sale Moor2 lines · £18.42
LineSent qtyReceived qtyCheck
Salbutamol 100mcg inhaler2
Lansoprazole 30mg caps ×281

Sender's ledger decrements on dispatch (transfer-out) · receiver's increments only on confirm (transfer-in) — both keyed to the transfer id · CD transfers additionally require a requisition and a register entry at both ends (PMR CD register).

Expiry & date checks — Timperley
Rota by areaCapture sessionShort-dated worklist (7)
AreaFrequencyLast checkedByNext dueStatus
Dispensary shelves A–KMonthly14 MayTom Mills (ACT)14 JunDue in 2 days
Dispensary shelves L–ZMonthly28 MayBeth Hughes28 JunOK
CD cabinetMonthly2 JunAisha Khan (RP)2 JulOK
FridgeWeekly9 JunTom Mills (ACT)16 JunOK
OTC fixtures F1–F3Quarterly1 MarBeth Hughes1 JunOverdue 11 days
Capture — Dispensary A–K (in progress)22 of 60 shelves
ProductBatchExpiryAction
Amoxicillin 250mg/5ml susp 100mlAX224107/2026
Adcal-D3 chewable ×112AD990708/2026
Atenolol 50mg tabs ×28AT551203/2028
Short-dated worklistexpiring ≤3 months
ProductBatchExpiryOn handDisposition
Amoxicillin 250mg/5ml susp 100mlAX224107/20263Remove — return/destroy
Adcal-D3 chewable ×112AD990708/20262Use first — stickered
Latanoprost 50mcg/ml eye dropsLT034109/20261Use first — fridge
Stock-credit / movement history (reverse path §4.3a)return_in · write_off · broken_bulk
WhenProductReasonQtyOn-hand effectDemand effectSource refBy
today 11:48Amoxicillin 500mg caps ×21return_in+1creditedreverses demandowing OWG-3381 (un-collected)Tom Mills (ACT)
today 09:30Amoxicillin 250mg/5ml susp 100mlwrite_off+3creditedexcluded (RV-3)expiry 07/2026 (short-dated)Beth Hughes
11 Jun 15:10Methadone 1mg/ml 500ml CD2CD returnnon-deducting signaln/apatient return → CD registerAisha Khan (RP)
10 Jun 13:22Co-codamol 30/500 ×100broken_bulk+40creditedreconciliation onlysplit pack — usable remainderTom Mills (ACT)

Each credit is keyed on its pmr.stock_returned / pmr.owing_resolved event id (idempotent, RV-1) · over-credit beyond the referenced origin quantity is rejected + alarmed (RV-5) · the same per-branch exactly-one-writer gate as the deduct side (RV-4).

Removals post ledger movements (expiry write-off) and suppress reorder suggestions for the affected pack · rota completion is auditable evidence for inspection · short-dated CD stock routes to the PMR destruction workflow.

Wholesaler claims — Timperley
Open claims6
Credit pending£148.73
Credited (June)£92.15
Rejected (30d)1
Open (6)SubmittedCreditedRejected
ClaimSupplierTypeLinesValueRaisedStatus
CLM-0612-01AAHShort delivery1 — Warfarin 3mg ×28 (1 short)£1.92today · PO-TIM-0611-04Draft
CLM-0611-02PhoenixDamaged2 — crushed outer, leaking bottle£14.3011 JunSubmitted — awaiting credit note
CLM-0610-01AlliancePrice variance1 — invoiced £8.12 vs quoted £1.67£6.4510 JunCredit issued · CN-88231
CLM-0609-03AAHShort delivery1 — Salbutamol inhaler£3.859 JunRejected — POD signed clean
CLM-0608-02AAHDamaged3£22.108 JunCredit issued · CN-88102
Ageing
1 submitted claim >14 days without a credit note (CLM-0528-04, Alliance, £31.20) — chase with account manager.

Claims and claim lines link back to the delivery and invoice extraction that evidenced them · credit notes reconcile against the supplier statement · price-variance claims compare invoice price to the quoted cascade price at order time.

Ordering rules & cascade — Timperleyweekly rules refresh: Mon 03:00
Reorder rules by product classAI-refreshed weekly from usage history · manual overrides pin until released
ClassLinesMinReorder toAuto-orderRule source
Generics — fast movers318usage-based7 days' coverOnAI weekly refresh
Generics — slow movers90412OnAI weekly refresh
CD Schedule 24112Off — manual onlyManual
Fridge lines6613 days' coverOnAI weekly refresh
Specials / unlicensed120per order onlyNeverManual
Warfarin 3mg tabs ×28 line override148OnPinned by Aisha Khan · 2 Jun
Cascade priorities
1 · AAHSOAP/XMLconnected
2 · PhoenixXML PDIconnected
3 · AllianceREST/JSONslow API
4 · BNSno account
5 · Tridentno account
Tie-break
Surcharge avoidance
Branch delivery scheduledrives owing ETAs in the PMR
AAH — days
AAH — cutoff
AAH — 2nd drop
Alliance — days
Alliance — cutoff
Alliance — 2nd drop
Phoenix — days
Phoenix — cutoff
Phoenix — 2nd drop

Branch ordering rules refresh weekly from the usage-history demand pipeline · PMR dispense events are a demand source, never a rules engine (the PMR never reimplements this) · schedule edits recalculate owing ETAs on the next order confirm.

EPOS till — Lane 1operator: Tom Millsshift open 08:30
ItemQtyPriceLine total
Paracetamol 500mg tabs ×161£1.19£1.19
Chlorphenamine 4mg tabs ×28 P — gated1£3.20£3.20
Elastoplast fabric plasters ×201£2.75£2.75
NHS prescription charge Rx charge2£9.90£19.80
Quick keyCarrier bag 10p
Quick keyIbuprofen 200mg ×16
Quick keyRx charge £9.90
Quick keyPrice lookup
Total due£26.944 lines · VAT included

Offline-first PWA — product cache local, sales queue and sync on reconnect · sales draw down the shared ledger as reason='sale', disjoint from dispensing draw-downs · P-lines queue for authorisation when no pharmacist is signed in (RP status from the PMR) · Rx-charge takings reconcile with the PMR charge ledger.

Shifts & banking — Timperley
Shift takings (today)£412.65
Cash in drawer£128.40float £75.00
Safe drops today£200.00
Variance (week)−£1.35threshold ±£5
ShiftsSafe dropsBanking bagsCard settlements
ShiftLaneOperatorOpenedClosedTakingsCountedVariance
12 Jun AM1Tom Mills08:30£412.65Open
11 Jun PM1Beth Hughes13:0018:32£388.90£388.05−£0.85
11 Jun AM1Tom Mills08:2813:00£301.22£301.22£0.00
10 Jun PM1Beth Hughes13:0518:30£356.74£356.24−£0.50
Safe drops
TimeFromAmountBagBy / witness
11:42Lane 1£200.00B-4471Tom Mills / Aisha Khan
09:55Lane 1£100.00B-4470Beth Hughes / Tom Mills
Banking
BagAmountStatus
B-4469£350.00Banked 11 Jun · Barclays ref 90412
B-4470 + B-4471£300.00In safe — bank run Fri
Dojo card settlement 11 Jun: £642.10 — matched acquirer report

Cash-up variances beyond the threshold escalate to the branch manager and appear on the area dashboard · safe drops and banking bags are double-signed · card takings reconcile against the Dojo settlement file.

PIP ↔ dm+d mappingsingle source of truth
Unresolved PIPs14
Auto-matched this week213product-matcher AI
Coverage99.2%of priced wholesaler lines
Canonical view refreshed03:05 today
Unresolved (14)Recently fixedAll links
AAH — 6 unresolved
PIP 1234567"AMOX 500 CAPS 21" · price file 9 Junmatch 96% — Amoxicillin 500mg capsules ×21
PIP 7741920"OMEP 20 CAP GR 28" · price file 9 Junmatch 71% — Omeprazole 20mg gastro-resistant caps ×28
Alliance — 5 unresolved
PIP 8821004"SLBTML INH CFC-FREE" · price file 11 Jun2 candidates: Salbutamol 100mcg inhaler (87%) · Salamol 100mcg inhaler (64%)
Phoenix — 3 unresolved
PIP 3302917"BLOOD GLUC STRIPS 50" · price file 10 Junno candidate — escalate to catalogue team
Fix-up — PIP 1234567 (AAH)
Supplier description
Search dm+d (AMPP)
Selected AMPP

Links land in the wholesaler product-link table; the canonical PIP→AMPP view is the locked single resolution path for cascade pricing, barcode lookup and PMR event payloads · every link records actor + evidence (price-file row) for audit.

SCR / GP record — Margaret Thompson GP Connect: StructuredRetrieved today 09:41
Margaret Thompson  DOB 14 Mar 1948 (78) · NHS 485 777 3456 PDS ✓GP: Park Road Surgery (ODS A81021) · EMIS Web · GP record as at 12 Jun 2026 06:00
Medications (GP record)Source: GP Connect AR — Structured
MedicationTypeLast issuedQty
Atorvastatin 40mg tabletsRepeat21 May 202628
Ramipril 5mg capsulesRepeat21 May 202628
Alendronic acid 70mg tabletsRepeat21 May 20264
Colecalciferol 800unit capsulesRepeat23 Apr 202628
Amoxicillin 500mg capsulesAcute03 Feb 202621

Pharmacy structured view scope: medications · uncategorised items · investigations. Compare against local PMR history on the patient record.

Allergies & adverse reactionsSource: NCRS (SCR)
Allergies are not in the pharmacy GP Connect view.
NCRS / SCR remains the national allergy source — use the in-context launch and transcribe with attribution.
AllergenReactionSeverity
Phenoxymethylpenicillin (Penicillin V)RashModerate
Adhesive dressing (elastoplast)Skin reactionMild

Transcription pre-fills source = ncrs_scr with "NCRS viewed 12 Jun 2026"; pharmacist verification required before it counts in clinical checks.

Recent events — uncategorised items & investigationsData age: retrieved 12 Jun 2026 09:41
DateEventDetailCategory
28 May 2026Blood pressure reading142/88 mmHg, sittingUncategorised items
28 May 2026Weight / BMI58 kg · BMI 22.4Uncategorised items
12 May 2026eGFR54 mL/min/1.73m²Investigations
12 May 2026Full blood count — Hb121 g/LInvestigations
14 Jan 2026Smoking statusNever smokedUncategorised items
If the GP record is unavailable — patient opt-out or practice not enabled: degrade gracefully. Use NCRS / SCR or the shared care record, ask the patient directly, or phone the practice; record the alternative source used in the consultation note.

Audit: every GP-record view is logged as a record-view with actor, role, branch, is_remote and the permission-to-view declaration. Lawful basis is direct care — consent is never the basis; the gate is the recorded permission-to-view plus CIS2 RBAC.

Restricted record — access check Sensitive (PDS restricted)
Claire Donnelly  DOB 03 Sep 1982 (43) · NHS 943 476 5919Minimum identity shown for wrong-patient avoidance — confirm DOB with the patient before continuing
Reason for access
Reason *
Detail
Accessing as
What you will see at your role
Field groupYour access
Name, DOB, clinical record, allergiesVisible
Address & telecom"Restricted" placeholder
Related persons"Restricted" placeholder
GP practice & nominated pharmacy"Restricted" placeholder

Suppressed fields render as "restricted" placeholders, not blanks. Users holding the elevated RBAC right see the full record.

Audit notice. Continuing records a sensitive-record access event: actor, role, branch, is_remote, timestamp and your typed reason. These events feed the IG review queue; access without a direct-care justification is escalated to the superintendent and may be reported.
System behaviour for this record. No demographic updates are ever sent to PDS for restricted patients — edits are held as local-only divergence. Comms sends that would expose address or telecom are suppressed; delivery requires manual address confirmation.

Restricted handling follows PDS healthcare-worker conformance: no flag on search results, warning on open, role-gated field suppression, no outbound PDS updates.

Staff profile — Aisha Khan GPhC verified — conditioned RP-eligible: NO
EmploymentEmployed
Job titlePharmacist manager
Started03 Feb 2021
Home branchTimperley
ProfileRegistrations & checksTraining & competenciesShifts & leaveAccess
Directory profilestaff_profiles · staff-side HR-adjacent facts, not identity/auth attributes (ST-1, OQ-9)
Headshot
photo_blob_ref · locum/cover identification
Work phone
Work mobile
Orientation status
Emergency contact●●●●●●●●●● · relationship hidden · ●●●●● ●●● ●●● masked

Captured on staff_profiles: work_phone · work_mobile · emergency_contact JSONB {name, relationship, phone} · photo_blob_ref · orientation_status. orientation_status gates nothing — it drives the locum wizard's new-vs-returning branch (§2.4). No pay / HR-case fields live here.

ProfileRegistrations & checksTraining & competenciesShifts & leaveAccess
Condition · interim order — "Must not act as Responsible Pharmacist without a second pharmacist on site" · source: interim_order (GPhC) · imposed 28 Apr 2026 · review_on 28 Oct 2026 · restricts_rp = true
CheckNumber / referenceStatusVerifiedExpiresRe-check dueEvidence
GPhC — pharmacist2069481Verified — conditioned14 May 2026 · R. Whitfield30 Nov 202614 Nov 2026 Register snapshot · conditions captured
Indemnity coverPolicy MDU-PI-7741882 · insurer: The MDUVerified11 May 2026 · R. Whitfield31 Jul 2026≤ 60 days — worklisted Certificate of cover
DBS — enhanced00152348776Verified02 Feb 2026 · R. Whitfield02 Feb 2029 Manager-only · view audited
Right to workUK passport (no share code)Verified03 Feb 2021 · HR Evidence ref
GPhC — pharmacist (prior event)2069481Superseded09 May 2025 · A. Greaves31 Oct 2025 Register snapshot
Expiry worklists fire at 60 / 30 / 7 days — indemnity cover (ST-11) is worklisted exactly like the GPhC row. A lapsed, conditioned or flagged registration flips RP-eligibility and competency-derived gates immediately — fail closed.
Training & competencies
CodePinned toSigned off byExpiresStatus
pgd:pf:acute_sore_throatPF pack v6CSO — Dr E. MarshRe-sign-off — pack v7
pgd:pf:uti_womenPF pack v7CSO — Dr E. Marsh31 Mar 2027Granted
vaccinator:fluR. Whitfield (mgr)30 Sep 2026Granted
e-LfH safeguarding L2training recordcert upload31 May 2027Complete
Data security (DSPT)training recordcert upload10 Apr 2027Complete

PGD sign-offs are pinned to the content-pack version they were granted against — a new pack version re-opens the worklist, never a silent carry-forward (ST-4).

Shifts & leave
DateBranchRole on shiftStatus
Mon 15 Jun · 08:30–18:00TimperleyPharmacist (RP)Confirmed
Tue 16 Jun · 08:30–18:00TimperleyPharmacist (RP)Planned
Thu 18 Jun · 08:30–18:00TimperleyPharmacist (RP)Planned
Leave remaining: ~14.5 days (illustrative — balance ledger deferred, OQ-10) · next approved: 20–24 Jul

Planning view only — who was RP and when comes from the compliance RP log, never the rota (ST-7).

Access (identity-rendered)
Role: PharmacistRole: Branch managerBranch access: TimperleyCIS2 linked · smartcard 1029 384 7765

Read and written through the identity module's API — staff renders the UX, identity owns roles, permissions and branch-access grants. No idm_* writes from this module, ever.

Audit: registration verifications, competency grant/revoke, and every DBS / right-to-work detail view are recorded with actor + correlation id.

Rota — Timperley · w/c 9 Jun Draft — unpublished changes
Cell legend — published (planned/confirmed) draft (unpublished) open cover confirmed no_show
Mon 9Tue 10Wed 11Thu 12Fri 13Sat 14
Pharmacist (RP) Khan
confirmed · published
Khan
planned · published
Locum Novak
planned · published · step-out 13:00–14:00
Khan
planned · published
Khan
confirmed · published
OPEN — no RP
open · draft
ACT (accuracy check) Mills
confirmed · published
Mills
confirmed · published
— none
no act shift
Mills
confirmed · published
Mills
no_show · published
OPEN cover
open · draft · assign on cover board
Dispenser Ortiz
confirmed · pub
Ortiz
planned · pub
Ortiz
planned · pub
Reed
planned · pub
Ortiz
confirmed · pub
Reed
planned · draft
Counter Bishop
confirmed · pub
Bishop
planned · pub
Bishop
planned · pub
Bishop
planned · pub
Bishop
planned · pub
Hall
planned · draft
Driver Doyle
confirmed · pub
Doyle
planned · pub
— (college) Doyle
planned · pub
Doyle
planned · pub
cancelled
cancelled · pub

Every cell carries a staff_shifts.status (draft/open/planned/confirmed/worked/no_show/cancelled) and a published-vs-draft state from published_at. Sat 14 still has draft cells (dashed) alongside published ones — the header "Draft — unpublished changes" reflects exactly these. An open cell (NULL user_id) is the cover-board source.

Planned RP step-out markers (advisory, ST-7)
Wed 11 Jun · 13:00–14:00 — Locum Novak (RP) stepping out · cover: "GSL-only, no RP-required activity" · expected 60 min advisory plan

A planned within-shift step-out is a visible plan so a known cover window is not mistaken for full RP presence. It never derives the compliance "operating without RP" fact — the statutory record stays in compliance (RP-2 ≤ 2-hour guidance is operator advice, not enforced here).

Shift status & change control
draftopenplannedconfirmedworkedno_showcancelled

Planning view only — RP status comes from the RP log (ST-7). RP-coverage and skill-mix coverage gaps are computed as views from the §2.5 enumerated role_on_shift + can_accuracy_check/can_clinical_check competency codes and feed the superintendent [● GAP!] dashboard via reporting. Staff writes are blocked offline — reconnect to publish.

Training & competency matrix — Timperley
Mandatory training coverage (DSPT)92%
PGD sign-offs current9 / 12
Expiring ≤ 60 days4
Missing / revoked3
StaffPGD: PF supplyPGD: UTI (women)Vaccinator: fluVaccinator: COVIDNCSCT: SCSClinical checkAccuracy checkSafeguarding L2Data security
Aisha Khan · Pharmacistv7 re-sign-off✓ v7✓ exp 09/26n/a
P. Novak · Locum pharmacistv7 pendingn/a
Tom Mills · Technician (ACT)n/an/an/a✓ exp 01/27Exp 30 Jun
L. Ortiz · Dispensern/an/an/an/an/an/a
J. Reed · Dispensern/an/an/an/an/an/aExpired 31 May
G. Bishop · Countern/an/an/an/aRevoked 04/26n/an/aExp 12 Jul
Sam Doyle · Drivern/an/an/an/an/an/an/a
Sign-off worklist (4)
Aisha Khan — pgd:pf re-sign-off against PF pack v7 · authority: CSO (Dr E. Marsh, named + GPhC-validated)
P. Novak (locum) — pgd:pf v7 pending · cannot deliver PF supply until granted — gate fails closed (ST-3)
J. Reed — Safeguarding L2 expired 31 May · mandatory for counter SOPs — activity permission gated per policy
Tom Mills — Data security (DSPT) expires 30 Jun · re-completion reminder sent 60-day

CSV / e-LfH imports quarantine malformed rows with a per-row report — no silent partial import. Clinical-services enforces performer rules server-side via staff.hasCompetency(): missing, expired, revoked or erroring = not competent.

Leave & availability ~14.5 days (illustrative — pending OQ-10)
My requests — Aisha KhanKind is enumerated (staff_leave.kind) — no free text
Kind enum:annualsicknessunpaidtoilparentalcompassionateother
KindFromToDaysStatusDecided
annual20 Jul 202624 Jul 20265ApprovedR. Whitfield · 28 May
toil03 Jul 202603 Jul 20261ApprovedR. Whitfield · 01 Jun
annual14 Aug 202614 Aug 20261Requested
compassionate09 Jun 202610 Jun 20262ApprovedR. Whitfield · 08 Jun
annual06 Jun 202606 Jun 20261Cancelledself · 02 Jun

Decisions emit staff.leave_decided — you are notified via the in-shell bell; staff notifications never use the patient-facing comms module (and platform-mail for published-shift changes).

Approval queue — Timperley (manager)
Awaiting decision (5)
Tom Mills · annual · 29 Jun – 03 Jul (5d) Conflict: published ACT shifts Mon–Fri w/c 29 Jun
L. Ortiz · annual · 22 – 26 Jun (5d)No rota conflict
J. Reed · sickness (retrospective) · 09 – 10 Jun (2d)Shifts already marked no-show
G. Bishop · unpaid · 04 Jul (1d) Conflict: published counter shift Sat 04 Jul
J. Reed · parental · 18 Aug – 12 Sep (20d)No rota conflict (draft week)
Declared availability (advisory to rota planning)
StaffPatternValid fromValid to
J. ReedNot available Saturdays01 Jul 2026open
G. BishopMon–Thu only, 09:00–15:0001 Jun 202631 Aug 2026
Sam DoyleNo Wednesdays (college)01 Sep 2025open

Edits to published shifts arising from leave decisions are audited and notify affected staff (ST-5). Staff writes are blocked offline — reconnect to manage leave.

Locum management
Active engagements2
Pending checks2
Open cover shifts3
Access grants expiring this week1
LocumGPhCIndemnityBranchesDatesAccess windowStatus
P. Novak2188345 ✓ verified 06 Jun✓ The MDU · exp 31 Jan 27Timperley10 – 13 Jun10 Jun 08:00 → 13 Jun 19:00Active
D. Adeyemi2204918 ✓ verified 09 Jun✗ no current indemnity rowTimperley · Sale20 – 21 JunPending checks — missing indemnity (ST-11)
R. Calloway✗ no verified registrationTimperley27 JunBlocked — GPhC (ST-8)
M. Osei2147730 verified 12 MayPDA-Union · expired 31 MayTimperley18 – 31 Mayrevoked at engagement endEnded
Engagement — P. Novak · Timperley · Wed 10 – Sat 13 JunActive
GPhC number * ST-8 ✓
Relied-on GPhC verification row
Indemnity — insurer + policy * ST-11 ✓
Relied-on indemnity row (expiry-worklisted)
Branch-access window (mandatory valid_to — ST-6)
Agreed day rate (booking term — payroll external)
Shifts: Wed 10 Jun RP Worked · Sat 13 Jun RP Planned · is_locum
Onboarding wizard — branches on orientation_status§2.4
D. Adeyemi · returningPending — missing indemnity
orientation_status = completed (engaged here Mar 2026) — orientation + provisioning skipped
1 · GPhC verification recorded (2204918, 09 Jun) — ST-8 ✓
2 · Indemnity — NOT recorded (insurer + policy + expiry, ST-11) — co-equal blocker
Identity user-provisioningskipped (account already provisioned)
Platform-orientation / training modeskipped (orientation_status = completed)
3 · Engagement activation — blocked until GPhC + indemnity both current (pending_checks names indemnity)
4 · Time-boxed branch access via identity API — blocked until activation
5 · Roster onto open cover shift (open → planned, is_locum)
R. Calloway · newBlocked — GPhC (ST-8)
orientation_status = not_started (first engagement) — gets extra provisioning + orientation steps
1 · GPhC — no verified registration (ST-8) — blocks activation
2 · Indemnity — insurer + policy + expiry required (ST-11)
+ Identity user-provisioning new only — invite via identity API (PMR renders, identity owns the account)
+ Platform-orientation / training mode new only — orientation_status not_started → in_progress → completed
3 · Engagement activation — blocked until both checks current
4 · Time-boxed branch access via identity API
5 · Roster onto open cover shift · then CIS2 self-link at first NHS operation

With GPhC or indemnity missing the engagement stays pending_checks naming the specific blocker — no activation, no grant request, no shift assignment proceeds (ST-8 + ST-11). The PMR never issues or manages CIS2 credentials — the locum self-links own CIS2 at first NHS operation. End/cancel revokes outstanding grants; access past valid_to is denied by identity regardless.

Audit anchor: GPhC + indemnity verification → engagement → grant → shift → revocation is queryable by correlation id. Locum RP sign-ins run the same rpEligibility() check as employed pharmacists — a lapsed indemnity surfaces indemnity_expired in reasons[] where the locum-RP gate applies (ST-11); the statutory RP log lives in compliance.

Cover board — open shifts across the estate
Region: Greater Manchester Role: all Next 14 days5 open shifts
Open cover shifts (5)
Timperley · Sat 14 Jun · 09:00–13:00 · Pharmacist (RP) RP gap — branch cannot trade
Timperley · Sat 14 Jun · 09:00–17:00 · ACT (accuracy check) skill-mix gap
Sale · Mon 16 Jun · 13:00–18:00 · Dispenseropen
Altrincham · Wed 18 Jun · 09:00–18:00 · Pharmacist (RP)claimable — locum Novak available
Stretford · Fri 20 Jun · 08:30–13:00 · Counteropen

Estate-wide planning surface (central-ops scope). Assigning an open shift to a person is audited and notifies them via the in-shell bell + platform-mail on a published rota (ST-5) — never the patient-facing comms module. RP-coverage and skill-mix gaps shown here are advisory planning flags; the statutory RP presence record lives in compliance (ST-7).

Bulk campaignsaudience snapshot frozen at approval · estate-wide sends need two approvers
Outbox / logInboundCampaignsOpt-outs
Sending now1
Awaiting approval2
Campaign spend — Jun£318.26 / £500
Suppressed at dispatch — Jun214
CampaignClassScopeAudienceProgressSpend / capState
Flu vaccination invitations 2026/27vaccination_recallAll branches (377)12,480£0 / £1,200Awaiting 2nd approver
Spring COVID booster recallvaccination_recallTimperley642starts 16 Jun 09:00£0 / £60Approved · scheduled
BP check invitations — over-40scampaignTimperley + Hale (2)3,118
1,873 / 3,118 sent
£52.13 / £50Paused — budget cap
eRD nomination prompt — Timperleynomination_promptTimperley287 (preview)— / £25Draft · PECR class pending
Flu vaccination invitations 2025/26vaccination_recallAll branches (377)11,90211,902 sent · 11,310 delivered · 178 failed · 414 suppressed£286.13Completed 12 Oct 2025
Christmas opening hours promocampaignAll branches (377)Cancelled — retail content out of PMR scope

States: draft → approved → sending → paused → completed / cancelled · pause takes effect within one worker batch · members are individually stateful — a worker restart never re-sends · suppressed vaccination recalls re-enter the clinical manual-recall worklist.

Campaign — Flu vaccination invitations 2026/27 Awaiting 2nd approver
AudienceLive preview: 12,480 patients
Age ≥ 65 on 31 Mar 2027OR at-risk register (clinical eligibility)No flu vaccination since 1 Sep 2026Active patient · branch in scope
Branch scope *
Frequency cap
Suppression preview (re-checked at dispatch)
1,032 no invitation consent · 87 opted out (identifier-level) · 56 stale contact details · deceased / PDS-sensitive gated at send — fail closed, logged, never silent.
Consent basis at send (PECR)11,361 with provable basis
Each marketing member is included under a live pat_consents.marketing_comms basis, snapshotted to consent_basis_at_send at dispatch (I-16) — a withdrawn basis suppresses marketing_consent_absent.
Audience memberMarketing-consent basisSends in 14-day window
Susan Bell · 943 476 5919granted 14 Apr 2026 / digital0 / 1
Ahmed Hassan · 829 014 7733granted 02 Feb 2026 / in-branch1 / 1 — at cap, suppress
John Okafor · 471 558 0021granted 09 Mar 2026 / portal0 / 1
Eleanor Wright · 615 220 8847withdrawn 28 May 2026— suppress at dispatch
send_sequence_in_window accounts each member's marketing volume across overlapping campaigns — a member at the frequency_cap_policy limit (Max 1 / 14 days) is held, not double-messaged. Full per-member audit
Template & schedule
Template *
Routing
Send window *
Rate limit
Budget cap
Est. spend
Locked opt-out placeholder present — {optOutLine}
mandatory locked_placeholders field verified in every channel variant (SMS / NHS App / email) of "Flu invite v2"; the editor cannot remove it (I-2 / I-16). Approval is blocked until present.
Immutable
Approval — two-person rule (scope > 1 branch)
Created — Tom Mills (manager), 9 Jun 14:02
1st approval — Aisha Khan (superintendent), 10 Jun 09:15
2nd approval — required: tenant admin or superintendent, author ≠ approver

Only approved template versions can send · audience snapshot freezes at approval — later joiners are out, later opt-outs still suppress at dispatch · quiet hours 21:00–08:00 respected · approvals, pauses and both approver identities are audited.

Comms settings — budgets & policy Tenant admin
Quiet hours
Start
End
Non-urgent behaviour

Urgent delivery_update may pierce quiet hours (operator policy, per tenant). Ready-to-collect waits for morning — the pharmacy is shut anyway.

Aggregation
Ready-to-collect grouping
Daily cap per patient
Transports
ChannelProviderUnit costStatus
NHS App messageNHS Notify routing plan (via nhs-gateway)£0Connected
EmailNHS Notify£0Connected
SMS (fallback leg)NHS Notify2.4p + VATConnected
Inbound SMS (STOP / replies)Commercial provider — procurement openper msgDecision pending
Letter (large print for AIS)NHS Notify print76p + VATConnected

No automatic cross-provider fallback — a failed send is a visible failure, not a trigger for a shadow path.

Per-class policyfull §2.4 message-class set · purpose group drives the per-patient channel resolution (§2.1a)
ClassPurpose groupDefault channel policyConsent basisQuiet hoursAt budget cap
ready_to_collectcollectionRouting plan: NHS App → SMSDirect careQueue to 08:00Alert & continue
collection_remindercollectionSMS / email per preference · daily sweepDirect careQueue to 08:00Alert & continue
owing_arrivedcollectionRouting plan: NHS App → SMSDirect careQueue to 08:00Alert & continue
owing_expiredcollectionSMS / email + branch task (CD day-28)Direct careQueue to 08:00Alert & continue
collection_confirmationcollectionPer preference · policy-gated, default OFFDirect careQueue to 08:00Alert & continue
mds_batch_readycollectionCare-home contact (§1.4 redirect)Direct careQueue to 08:00Alert & continue
delivery_updatedeliverySMS / emailDirect careUrgent may pierceAlert & continue
delivery_exceptiondeliverySMS / email · failed-attempt noticeDirect careUrgent may pierceAlert & continue
appointment_reminderappointmentsSMS / email · T-24h sweepDirect careQueue to 08:00Alert & continue
nms_followupappointmentsSMS / emailDirect careQueue to 08:00Alert & continue
vaccination_recallinvitationsCampaign rulesPECR — DPO pendingQueue to 08:00Hard stop — pause
nomination_promptinvitationsPortal / SMS link-out (§1.15)PECR — DPO pendingQueue to 08:00Hard stop — pause
campaignmarketingPer preference · consent-gatedPECR — DPO pendingQueue to 08:00Hard stop — pause
ad_hocad_hocPer patient default (wrapper template)Direct careQueue to 08:00Alert & continue

Legal classification of each class (direct care vs direct marketing under UK GDPR / PECR) is a DPO decision — OQ-C6; the consent schema supports either posture per class so it is configuration, not code. Sender identities & reply numbers

Collection-reminder policyOQ-C12 — policy values

Re-chase prescriptions still ready after N days, before EPS void / return (closes the "left on the shelf, silently voided" gap — H-COMMS-10 / AC-17). Daily scheduler sweep, not an event.

First reminder after
Second reminder
Max reminders / script
Void lead-out
eRD-issue cadence

Aggregated to one message per patient per sweep across all their uncollected scripts · re-checked at dispatch (I-10 → subject_not_ready if collected/voided) · cancelled by disp.collected. Lead-out computed from the real dispensing-token expiry (dispensing), never an assumed date.

Collection confirmationDefault OFF

Optional positive "collected by your representative" safeguarding signal (§1.7) — the patient learns their medicines left the pharmacy with someone. Doubles message volume, so opt-in per tenant / branch.

Send a confirmation when a representative collects
fires on disp.collected / delivery.collection_confirmed only where a named representative is recorded
Confirm patient-self collections too
off by default — most self-collections need no confirmation

Where OFF, the spec position is explicit: no confirmation is sent and cancelling the queued ready_to_collect is the only effect of disp.collected — the absence is a decision, not an oversight.

Inbound keyword → action mapmanager-editable · STOP / START are the regulatory floor and cannot be removed · §1.9 / AC-23

Maps a normalised inbound reply to an action (opt-out / opt-in) or a route raised on the owning module's public API (never a cross-module write), with an optional auto-acknowledgement. Matched against the most-recent outbound message (90-day lookback) so CANCEL hits the right subject.

KeywordKindAction / routeOwning moduleAuto-acknowledgement
STOP / UNSUBSCRIBE / ENDstopopt_out (identifier-level)Comms (regulatory)"You'll no longer get messages on this number."Locked
START / UNSTOPstartopt_in (identifier-level)Comms (regulatory)"You're opted back in for messages."Locked
CANCELkeyword_actiondelivery_rescheduleDelivery — DeliveryApi"Thanks — we've cancelled today's delivery."
COLLECTEDkeyword_actioncollection_handledDispensing — PrescriptionApi"Thanks — marked as collected."
REPEATkeyword_actionrepeat-by-replyOQ-C15 — phase-gatedheld until portal repeat flow
Unmatched free-text replies route to the inbound triage queue at the owning branch — never auto-acknowledged. A keyword whose subject ref is stale (e.g. CANCEL on an already-delivered order) is rejected by the owning module and routed to triage with the reason — never a false confirmation.

Open inbound triage queue

Care-home aggregationOQ-C11 — grain & default channel

Care-home message classes (mds_batch_ready, and any collection / delivery class whose subject is a current resident) redirect away from the resident's handset to the resolved wing / home contact (§1.4, mandatory — I-11). These set the grain and default channel for that nurse-station contact.

Aggregation grain
Default channel for nurse-station contacts
Allow a home to opt for a single home-level digest
even where the home is wing-structured — per-home / per-wing config lives in admin-config (D-CC2)
If no home / wing contact resolves
message suppresses (care_route_unresolved) and raises a branch task — never falls through to the resident's personal channel (I-11)

Example: Oakwood Care Home · 3 wings · email to nurse station · per-dose-round digest. Comms holds no care-home structure of its own — residency and wing assignment are read at enqueue via CareHomeApi (patients module).

Budgets & spend — June 2026alert threshold 80% · alerts to tenant admin + estate panel
SMS — transactional79%
£142.61 of £180 · alert & continue at cap
Letters62%
£74.48 of £120
Campaigns64%
£318.26 of £500 · hard-stop at cap
NHS App + emailFree
41,208 messages · £0 — channel economics favour App-first routing

Patient-care messaging is never silently switched off by a finance setting · spend metered from provider receipts and reconciled nightly · an unknown unit cost blocks campaign classes and alerts — never meters silently at £0 · budget changes are audited.

Patient portal — sign-inseparate deployable · NHS login P9 identity · DTAC applies
11:18portal.alliedpharmacies.uk
NHS login
ScriptIQ patient services
Allied Pharmacies · your nominated branch: Timperley Pharmacy
Use NHS login to prove who you are. It's the same email and password you use for the NHS App.
Identity verified to P9 — required before we show anything about your medicines.
We never see your NHS login password.
No NHS login? Call us on 0161 980 4412 or ask in branch — everything here can be done over the counter.
Prescription tracking lives in the NHS App — we'll send you there rather than copy it.

NHS login OIDC (P9 proofing) · portal traffic rides a dedicated, separately rate-limited /api/portal/* surface · branch offline state never affects the portal — requests queue server-side.

Portal — request a repeatcreates a pharmacy task, not a prescription
11:21portal.alliedpharmacies.uk
Request a repeat
Ahmed Hassan · tick the medicines you need
Amlodipine 5mg tablets
28 tablets · last issued 21 May · due 18 Jun
Atorvastatin 20mg tablets
28 tablets · last issued 21 May · due 18 Jun
Metformin 500mg m/r tablets
56 tablets · requested 9 Jun
Already requested
Salbutamol 100micrograms inhaler
1 inhaler · last issued 12 Mar
Timperley Pharmacy
12 Park Road, Timperley WA15 6QX · your EPS nomination
Note to pharmacy (optional)
Your GP may need to approve first. We'll message you when it's ready — track the prescription itself in the NHS App.

Submits to the dispensing-module worklist as a repeat-request task · if the branch is offline the request queues server-side and surfaces on reconnect · medication list limited to what the portal DPIA approves.

Portal — delivery trackingstop progress, not live GPS — privacy by design
13:58portal.alliedpharmacies.uk
Your delivery — today
DEL-20486 · Timperley Pharmacy · driver: Sam
Request received — Tue 10 Jun
Packed & checked — today 09:40
Out for delivery — you are stop 6 of 11
driver has completed 3 stops
Delivered
Estimated window 14:20 – 15:00
we'll ask for a signature at the door
Delivering to
14 Briar Close, Timperley WA15 7TD

Fed by delivery events (out-for-delivery, proof-of-delivery) — comms never knows the route · stop number only, no live van map: other patients' addresses are on that route · PoD confirmation triggers the "delivered" update.

Portal — message historyeverything the pharmacy has sent, by channel
13:59portal.alliedpharmacies.uk
Messages
Ahmed Hassan · newest first
NHS AppToday 13:55
Your delivery is on its way — estimated 14:20–15:00 today.
NHS AppTue 10 Jun
Your prescription is ready to collect at Timperley Pharmacy.
SMSWed 28 May
An item we owed you has arrived at Timperley Pharmacy. Pop in any time we're open.
EmailWed 14 May
Reminder: your New Medicine Service check-in is tomorrow at 2:30pm.
Letter6 Oct 2025
Flu vaccination invitation — book your free NHS flu jab at the pharmacy.

Same append-only per-patient message log the pharmacy team sees on the patient record Comms tab · content minimised — texts never name your medicines · delivery state shown per message once receipts arrive.

Portal — contact preferencesper-purpose grid · writes back lossless to the pharmacy record (I-12)
14:01portal.alliedpharmacies.uk
How we contact you
Ahmed Hassan · choose a channel for each kind of message — they don't have to be the same
For…
Ready to collect / owings
collection
213
Deliveries
delivery
12
Appointments
appointments / NMS
123
Health invitations
flu, NHS checks
231
Marketing
offers, news
Off — you'll get none of these
1 = first choice · numbers rank fallbacks · tap a cell to set a rank, or leave blank to exclude a channel. An empty row means we won't send that kind at all.
Preferred contact window
only contact me after 17:00, before 20:00 — we hold non-urgent messages until then
Quiet hours 21:00 – 08:00
on top of your window — urgent delivery updates may still come through
Language
Stop all texts on this number
same as replying STOP — applies to every message kind on 07700 900123

Per-(purpose × channel) grid with ranking + preferred-contact-window — mirrors the staff-side patient-record Comms tab so the round-trip is lossless (I-12); a flat single-channel list would be non-conformant. Saves to comms_channel_preference + comms_channel_preference_purpose (source: portal) with full audit · an empty purpose row suppresses that purpose (purpose_opt_out), never silently sends elsewhere · STOP keys on the identifier — it applies to everyone sharing the number · accessibility (AIS large-print) and deceased / sensitivity flags always override these preferences.

Portal — nominate this pharmacy Phase-gated · §1.15 / OQ-C15
14:06portal.alliedpharmacies.uk
Make Timperley your nominated pharmacy
Ahmed Hassan · nominate us and your repeat prescriptions come straight here from your GP
Timperley Pharmacy
12 Park Road, Timperley WA15 6QX
Not yet nominated
How to nominate us
In the NHS App → Your health → Nominated pharmacy
At nhs.uk → find a pharmacy → set as nominated
Or just ask us at the counter next time — we'll set it up for you
Open the NHS nomination page
We can't change your nomination from here — only you (or the GP) can, through the NHS. This keeps the choice yours.
Pre-portal behaviour (today, before this portal ships)

The nomination_prompt message class is live now, but its pre-portal action is tenant-configurable (§1.15) and never pretends to switch nomination over SMS:

ModeWhat happensStatus
Branch taskRaises a worklist item prompting staff to ask the patient to nominate at the counter (the incumbents' real-world mechanism)Default for Timperley
SMS / email link-outSends a message linking to the NHS nomination route — not an in-message switchAvailable
Repeat-by-reply (REPEAT)Texting REPEAT to re-order overlaps the inbound keyword map and the portal repeat flowOQ-C15 — held until portal

Designed, phase-gated: the in-portal nomination switch is deferred pending nomination capture (patients OQ-1) · nomination_prompt maps to the invitations purpose group (§2.1a) and is treated as direct marketing under PECR pending the DPO classification (OQ-C6) — consent-gated at dispatch.

Security — Aisha Khan MFA enrolled
Two-step verification (TOTP)
Authenticator appEnrolled 12 Jan 2026
Recovery codes7 of 10 remaining
WebAuthn / passkeyPhase 2

RFC 6238 TOTP, 30 s step, ±1 step skew · secret encrypted at rest · recovery codes stored only as salted hashes (argon2id), shown once.

Password & bench PIN
Passwordlast changed 03 Apr 2026
Bench PINSet
CIS2 identity linkLinked — R8003

PIN is bench re-entry only — never primary login, never fresh-auth, never witness, never CIS2. 5 failures lock the PIN (credential login required).

My active sessions
DeviceBranchStartedLast seenState
Dispensary bench 1 this deviceTimperley08:02nowActive
Back officeTimperley08:5509:41Locked (idle)
Laptop — ChromeTimperley remoteyesterday 19:12yesterday 19:48Idle

HttpOnly cookies only (15-min access + 7-day refresh) — never localStorage · 8-hour absolute session cap, 30-min idle sliding refresh · idle-lock tiers: bench 10 m, back office 30 m, remote 15 m · sessions are server-revocable.

MFA enrolment — authenticator appStep 3 of 3
1 · Scan QR ✓2 · Verify code ✓3 · Recovery codes
1 · Scan the QR code
otpauth://totp/ScriptIQ:aisha.khan@alliedpharmacies.com

Can't scan? Enter the key manually:

JBSW · Y3DP · EHPK · 3PXP

Provisioning secret encrypted at rest the moment it is issued. Works with any RFC 6238 app (30 s step).

2 · Verify a code

Enter the 6-digit code your app shows now.

Verification activates enrolment and upgrades this session to mfa_verified=true. Until then, mandatory-MFA roles can reach nothing beyond this wizard.

3 · Save your recovery codes
K7QF-2MXD9HWT-PL4NXR2B-77QEMD5K-ZJ3AT6YV-08RCBQ4H-NN1SWJ8P-5EKDFA3M-RV9XUC1D-H6TLSG7N-4YPB
I have stored these somewhere safe

Enrolment and disable both require fresh authentication · identity.mfa_enrolled / identity.mfa_disabled are audited with actor · lost device? An admin MFA reset forces re-enrolment at next login.

Sessions & MFA — estatelive · 377 branches
Active sessions1,288
Locked benches214
Remote sessions31
MFA enrolled96%
Reset requests3
Active sessionsMFA resets (3)PIN lockouts (1)
UserRoleBranchDeviceAgeLast seenMFAFlags
Aisha KhanpharmacistTimperleyDispensary bench 11h 44mnowRP
R. Okonkwocentral_ops42-branch scopeLaptop — Chrome3h 02m2mis_remote
Tom Millstechnician_actTimperleyDispensary bench 22h 10mlocked 18mLocked
P. NovaklocumTimperleyBack office7h 41m26mnear 8h cap time-boxed Wed
Sam Doyledelivery_driverTimperleyDriver app — Pixel 7a1h 05m4mexempt (policy)route-scoped
MFA reset requests
UserBranchReasonRequestedIdentity verified by
M. Ortiz (dispenser)TimperleyLost phonetoday 08:20branch_manager — in person
D. Hall (counter)SaleNew deviceyesterdaypending
K. Reed (dispenser)StockportAuthenticator wiped09 Junarea_manager — video call

Reset clears enrolment and forces re-enrolment at next login — it never disables the MFA requirement. Suspension fires identity.user_suspended → revocation worker ends every session and refresh chain.

CIS2 — identity links, role map & AAL policy
Identity linksRole mapAAL policy
UserCIS2 subRole profiles (URPID)Activity codesLinkedLast NHS loginStatus
Aisha Khan555042…91R8003 @ FLM49 (Timperley) · R8003 @ FLM62B0068 B0572 B0401 B082511 Feb 2026today 08:14Linked
P. Novak555198…03R8003 @ FLM49B0068 B057204 Jun 202611 JunLinked
Tom Mills556377…44R8008 @ FLM49B040120 Mar 202609 JunLinked
K. Osei557210…58R8003 @ FQX18Blocked — name/GPhC mismatch

Linking requires an authenticated PMR session + the CIS2 assertion; a mismatched human identity (name / GPhC sanity check) blocks linking pending admin review. Selected URPID is stamped on every NHS call's audit record.

Role map (idm_cis2_role_map) — configuration, not code
CIS2 codeDescriptionMaps to local roles
R8003Health Professionalpharmacist · locum
R8008Admin / Clinical Supporttechnician_act · dispenser · counter
R8004Healthcare Student (legacy)no mapping — deny

Mapping changes are audited with before/after. A valid smartcard without the local permission is denied — and vice versa.

AAL policy per operation (nhs-gateway config)
OperationActivityAAL
EPS release / downloadB0572AAL3OQ-1 · confirm vs SCAL
Dispense notification (send/amend/withdraw)B0572AAL3OQ-1
Return prescription to SpineB0572AAL3OQ-1
Reimbursement claim (send/amend)B0572AAL3OQ-1
View medication (Prescription Tracker)B0401AAL2+
PDS demographic update / nominationB0825AAL2
PDS trace / readAAL2app-restricted where SCAL permits

AAL3-capable authenticators assumed: smartcard, FIDO2 key, Windows Hello, CIS2 iPad app. Per-operation AAL pinned here at EPS onboarding.

Cross-product handoffScriptIQ → StockIQ ordering
Opening Ordering — Timperley

Redeeming your single-use sign-in code…

Code redeemed server-side (single-use jti, ~60 s window)
15-min StockIQ token minted (aud stockiq-api, signed client assertion)
Return URL validated against the allow-list
303 redirect — code stripped from the URL
Code expired or already used

Deep-link codes are single-use and live ~60 seconds. Nothing was signed in.

Return URL rejected

The requested destination is not on the allow-list. This attempt has been audited. Correlation id: c0a8-44d1-9b2e.

Re-authentication required

Your ScriptIQ session ended mid-hop (revoked or 8-hour cap reached). Sign in again to continue.

The browser only ever carries the single-use code — URL-borne bearer tokens (history, Referer, proxy/CDN logs, shared-bench shoulder-surfing) are eliminated. Redemptions are logged in idm_exchanged_tokens; logout best-effort revokes them.

NCSO & endorsement registry — June 2026
Concession lines (Jun)18
Claims carrying NCSO42
Gate warnings6
Est. uplift (branch)£312
Monthly concessionsEndorsement codesGate impact
ProductPackTariff £Concession £UpliftGrantedStatus
Sertraline 100mg tablets28£1.69£4.85+£3.1610 JunInterim
Quetiapine 100mg tablets60£2.21£6.40+£4.1910 JunInterim
Carbamazepine 200mg tablets84£3.83£7.12+£3.2910 JunFinal
Estradiol 50micrograms/24hours patches8£4.40£9.95+£5.5512 JunInterim
Bisoprolol 2.5mg tablets28£0.89£2.30+£1.4110 JunFinal
Prednisolone 5mg tablets28£1.04£3.18+£2.1412 JunInterim
Endorsement code reference
CodeMeaningRequired dataDQ gate
NCSONo cheaper stock obtainableproduct + month on concession listNCSO_IN_CONCESSION_MONTH · warn
SSPSerious Shortage Protocol supply3-digit SSP referenceSSP_REF_FORMAT · block
BBBroken bulkpack size + quantityBB_QUANTITY · block
XPOut-of-pocket expensesamount + reasonXP_AMOUNT · block
MFMeasured & fitted (appliance)fitting detail
EDExtemporaneously dispensedformula + quantities
SPUnlicensed specialinvoice price + supplier
Gate impact this month
6 claims warned — NCSO endorsement references a product/month NOT on the published list
36 NCSO claims match the concession list — claimable
Gate severity: warn (concession lists are claim-period data, not code)

Endorsement capture happens in dispensing — this registry validates completeness/coherence at the claim gate and never edits endorsements.

Versioned reference data with effective_from / effective_to — monthly list ingestion is a data deployment, not a release. Variance categorisation separates concession_delta from genuinely disallowed items.

FP10PCD submissions — private Sch 2/3 CD prescriptions
Branches submitted10/12
Forms this period23
Due1
Overdue1
BranchPeriodFormsSubmittedByEvidence refStatus
TimperleyMay 2026402 JunA. KhanPCD-2605-TIMSubmitted
SaleMay 2026001 JunJ. BrennanPCD-2605-SALNil return
WilmslowMay 2026203 JunF. AdebayoPCD-2605-WILSubmitted
AltrinchamMay 20266Due
StockportMay 202611Overdue
Reminder worklist — unsubmitted months
Stockport — May 2026 · 11 forms counted, not yet sentreminder raised 08 Jun → branch manager + central ops
Altrincham — May 2026 · 6 forms counteddue window open

One row per branch per period (claim_fp10pcd_submissions, UNIQUE branch+period) · evidence ref retained for inspection · the private CD supplies themselves live in the POM/CD registers, not here.

CDAO occurrence reports2026-Q1auto-generated 1 Apr (scheduler)
Branches generated12/12
Submitted10
Nothing-to-report7
Open lines3
BranchPeriodLinesNothing to reportSubmitted viaReferenceStatus
Stockport2026-Q12Awaiting submission
Altrincham2026-Q10Awaiting submission
Timperley2026-Q11cdreporting.co.ukCDAO-26Q1-0412Submitted 04 Apr
Sale2026-Q10cdreporting.co.ukCDAO-26Q1-0398Submitted 03 Apr
Wilmslow2026-Q10cdreporting.co.ukCDAO-26Q1-0399Submitted 03 Apr

A row exists per branch per quarter INCLUDING nothing-to-report periods (AC-20). Escalated CD balance-check discrepancies auto-append a line + superintendent alert — never optional, never suppressible.

Occurrence report — Stockport · 2026-Q1Awaiting submission
Submission outstanding

Generated 1 Apr; due per the CDAO quarterly timetable. Superintendent and central ops notified 8 Apr.

Report lines (refs into safety events + escalated balance checks)
#SourceOccurredSummaryRef
1escalated balance check14 FebMethadone 1mg/ml oral solution — running balance −60 ml vs physical count; investigation closed 18 Feb (recording error; register correction CD-AMD-118)evt_8c12
2safety event — loss03 MarMorphine sulfate 10mg/5ml oral solution — bottle breakage during tray assembly, witnessed destruction of residue; nil unaccountedevt_91d7
Submission record
Period
Generated
CDAO region
Nothing to report
Submitted via
Portal reference

occurrence_report.generated / occurrence_report.submitted are audited · lines are read-only here — source records live in the CD register and incident log · retention ≥ 5 years from period end.

Alerts & KPI settingsestate scope
Alert queue (5)RulesKPI targetsBenchmarks
Critical
rp_gapStockporttrading with no active RP since 09:12 (41m)
eps_dlqEstatenhs-gateway dead-letter depth 3 — stuck EPS messages
Warning
rp_absence_limitSaleRP absence 92m of 120m statutory ceiling (rule warns at 90m)
claim_deadline_riskTimperley14 unclaimed PF consultations · £238 at risk · MYS deadline 5 Jul
pf_cap_riskWilmslow93% of NHSBSA monthly Pharmacy First cap consumed
Alert rules (rep_alert_rule)
RuleSourceSeverityParamsScopeFlagsEnabled
rp_gaplive signalcriticalgrace 5 min within trading hourscompanyis_system — tune onlyon
rp_absence_limitlive signalwarningwarn at 90 of 120 mincompanyis_systemon
claim_deadline_riskkpi: claiming_completenesswarningN = 5 days to MYS deadlinecompanyis_systemon
pf_threshold_riskkpi: pf_clinical_pathwayswarningprojected month-end in 20–29 band or just below 20companyis_systemon
pf_cap_riskkpi: pf_cap_utilisationwarning≥ 90% of monthly capcompanyis_systemon
eps_dlqlive signalcriticaldead-letter depth > 0companyis_systemon
freshness_violationmetainfoaggregate older than freshness classcompanyis_system · meta-alerton
uncollected_p90_localkpi: awaiting_handout_p90_ageinfo> 7 days, > 25 bagsbranch: Timperleycustomoff

Seeded system rules cannot be deleted, only tuned · escalation ladder per rule (notify → page central ops) · lifecycle open → acknowledged → resolved, transitions audited, rows never deleted.

KPI targets (rep_kpi_target — effective-dated)
KPIScopeTargetEffectiveSet by
nms_conversioncompany≥ 80%1 Apr 2026 →R. Okonkwo
waiter_turnaround_p90branch: Timperley≤ 20 min1 Apr 2026 →branch_manager
pf_clinical_pathwaysbranch (all)≥ 30 / month1 Apr 2026 →superintendent
cd_balance_check_coveragecompany≥ 95%1 Jan 2026 →superintendent

items_per_staff_hour shows "unavailable" until the staff module exports worked hours — no estimated denominators, and no published industry benchmark exists.

External benchmarks
NHSBSA per-contractor dispensing — Apr 2026 · 11,204 contractors · mapped via ODS codeimported 08 Jun
Pharmacy First monthly caps — 2026/27 fileimported 02 Jun
Cluster average: "GM multiples" — 8,400 items/monthconfig

Every tile and column exposes its plain-English numerator / denominator / window on demand — definition-versioned, so history is never silently restated.

Export approvals — DLPsuperintendent view
Pending approval2
Approved (active)1
Expired this month1
Runs this month118
Approval queue (rep_export_approval)
ReqRequested byScope descriptionEst. rowsPatient-levelStatus
APP-0234R. Okonkwo (central_ops)Uncollected bags > 7 days — 42 assigned branches2,140yes · multi-branchPending
APP-0233L. Faulkner (area_manager)MDS patients + cycle dates — Sale, Altrincham312yes · 2 branchesPending
APP-0231R. Okonkwo (central_ops)Estate dispensing volume by branch, FY25/26137,000no — aggregateApproved · expires 14 Jun 18:00
APP-0226J. Brennan (branch_manager)Owings history, Sale + Wilmslow11,800yesExpired — run blocked

An expired approval blocks the run with an explicit message; re-approval is required and the attempt is audited. rep.export_approved lands in the DLP audit trail.

Recent runs (rep_report_run)
RunDefinitionRequested byRowsWatermark identityBulkApprovalFile
RUN-9921Estate dispensing volume FY25/26R. Okonkwo137,042r.okonkwo@alliedpharmacies.comAPP-0231xlsx · 4.1 MB
RUN-9918CD compliance pack — TimperleyA. Khan312aisha.khan@alliedpharmacies.compdf
RUN-9912Claims vs paid variance — Maycentral finance1,884finance@alliedpharmacies.comcsv
RUN-9907Owings history, Sale + WilmslowJ. Brennanblocked — approval expired

Approvals and runs retained 8 years (audit-aligned) · no role has direct DB access · estate aggregates carry no patient identifiers — patient-level lists render live under branch-scoped RBAC, never persisted into rep_* tables.

Van registryvehicles · capacity · checks & MOT
Active vans3
Off-road1
MOT due ≤ 30d1
Cold-chain capable2
VanRegBranchTemp zonesCapacityDaily checkMOTService dueStatus
VAN-01MX21 KLPTimperleyambient + fridge boxes C-1, C-218 totestoday ✓ S. Doyle14 Mar 202722,000 miOn Round A
VAN-02MX23 TRVTimperleyambient + fridge box C-314 totestoday ✓02 Jul 2026 · 20dAug 2026Loading
VAN-03MA70 HJXStockportambient only12 totesoutstanding09 Nov 2026Active
VAN-04MJ19 WPDSaleambient + fridge box C-414 totes28 Sep 2026in workshopOff-road — clutch
Daily walkaround checks — today
VAN-01 · Sam Doyle · 08:40 — tyres, lights, load straps ✓ · fridge C-1 4.2 °C, C-2 4.8 °C
VAN-02 · K. Reed · 08:55 — all checks ✓ · fridge C-3 3.9 °C
VAN-03 · check not recorded

Fridge boxes hold 2–8 °C; deviations open a cold-chain assessment before any restock (quarantine default). Telemetry loggers per tote/van zone are a later phase — v1 is flags + manual capture.

Breakdown & reassignment
VAN-04 off-road since 10 Jun — 9 remaining stops reassigned to VAN-02 / S. Doyle
Manifest transfer scan-verified — bags physically moved ⇒ every bag re-scanned
Original route closed with disposition notes

A route without a van is legal in v1 (del_vans is a light registry). Failed CD and fridge items always return to branch the same working day — never overnight in a van (SM-D5).

CDS dataset consoleUKCA Class I device boundary 8/8 datasets healthy
Screenings today1,842all branches
Severe alerts surfaced239 overridden w/ reason (B0068)
Unavailable returns0no fail-closed blocks this week
Client engine coverage12/12offline build 3.2.1 (D10)
Dataset health — cds.datasetStatus() · all 8 canonical ref_cds_* tables 8/8 healthy
Dataset (public.ref_*)SourceActive versionLoadedStale afterHealth
ref_cds_interactionsFDB Multilex (licensed)int v126 · bundle 2026.0525 May 02:1025 JulHealthy
ref_cds_allergy_xsensFDB Multilexall v89 · bundle 2026.0525 May 02:1025 JulHealthy
ref_cds_dose_rangesFDB Multilexdose v54 · bundle 2026.0525 May 02:1125 JulHealthy
ref_cds_duplicate_classesFDB Multilexdup v41 · bundle 2026.0525 May 02:1125 JulHealthy
ref_cds_pregnancy (OQ-6 IN SCOPE)FDB Multilex — pregnancy modulepreg v12 · bundle 2026.0525 May 02:1225 JulHealthy
ref_cds_lactation (OQ-6 IN SCOPE)FDB Multilex — lactation modulelact v12 · bundle 2026.0525 May 02:1225 JulHealthy
ref_cds_pincer_indicators (D-CC3)PRIMIS/PINCER published setpincer v6 · 2026 release25 May 02:1225 AugHealthy
ref_cds_severity_map required for ANY alertingcanonical native-grade → ScriptIQ-tier + blocking mapsev-map v9 · bundle 2026.0525 May 02:1325 JulHealthy
Engine — server / versioned client buildcds module (pmr-core)3.2.1 / 3.2.1-clientrelease 2026.23Byte-stable (CDS-AC-1)
Staged activation — bundle 2026.06 (int v127 / all v90 / dose v55 / dup v41 / preg v13 / lact v12 / pincer v6 / sev-map v9)CSO sign-off pending
Validation
Effective date *
Activated by

Activation re-checks the device-change gate: CSO sign-off (A. Sharief) + platform_admin fresh re-auth · all 8 slices (incl. pregnancy/lactation/PINCER/severity-map) version-pin together and snapshot onto subsequent cds_screenings rows · prior version retained for unwrap/reproduction · offline client slices re-pin on next sync · a severity-map version change re-runs the DCB0129 hazard log (it changes which alerts block).

Version history (device-change log) — all 8 ref_cds_* tables
ActivatedBundleFrom → toTables changedByEffectiveAudit
25 May 2026FDB Multilex2026.04 → 2026.05+ ref_cds_pregnancy v12, + ref_cds_lactation v12 (OQ-6 resolved IN — extended intended-purpose → re-ran UKCA Class-I self-declaration + DCB0129)M. Sharief · CSO ✓01 Jun 02:00cds.dataset_activated ✓
28 Apr 2026FDB Multilex2026.03 → 2026.04int v125→v126 · sev-map v8→v9 (blocking-boundary change — hazard log re-run)M. Sharief · CSO ✓01 May 02:00
30 Mar 2026FDB Multilex + PINCER2026.02 → 2026.03+ ref_cds_pincer_indicators v6 · dose v53→v54M. Sharief · CSO ✓01 Apr 02:00
Screening traceability — find a past screening
Rx / EPS token / screening id
Date range
 
ScreeningWhenSubjectPatientRuntimeDataset versions usedResult
scr_77120409 Jun 10:42Rx ····4413Susan Bell (72)server · engine 3.2.1int v126 · all v89 · dose v54 · dup v411 severe 1 warning — override w/ reason (A. Khan, B0068)
scr_76899106 Jun 16:05Rx ····4413Susan Bell (72)client-offline · 3.2.1-clientcached 2026.05 · age 9d shown to user1 warning — acknowledged
scr_771204 · Severe — warfarin sodium 3mg + clarithromycin 500mg
Potentiation of anticoagulant effect; INR monitoring advised. Evidence: FDB Multilex monograph 412 · dataset int v126 · input_digest 9f3a…c2e1.
Reproducible: same inputs + pinned versions ⇒ identical alert set (CDS-AC-1) — append-only cds_screenings / cds_alerts, retained with the clinical class.
Data platform — PostgreSQL · Blob · Redis PITR healthy · RPO 5 min
PITR RPO5 mingeo-redundant ON (DUR-4)
Last verified restore18 Mayde-identified env · checksums ✓
Migrations applied184/184schema_migrations · 0 drift
Partitions online24 moarchive to Blob beyond
Backups & restorePartitions & archiveMigrationsRetentionTenant schemas
Backups & restore drills
ItemPolicyLastResult
PostgreSQL Flexible Server PITRcontinuous · 35-day window · 5-min RPOrollingHealthy
Geo-redundant backuppaired region (DUR-4)rollingON
Quarterly restore drillrestore → de-identified verified env → checksum report18 May 2026 · 41 minVerified ✓
Audit digest anchoring (Standard tier)daily SHA-256 of each partition slice → immutable Blob (WORM, legal hold)today 04:00Anchored ✓ no drift
Blob lifecycle (documents / scans / labels)AES-256 · CMK on audit-archive + document containers · versionedrollingOK
Partitions & archive jobs (monthly range, per tenant)
TablePartitionRowsActionStatus
disp_supply_events2024-051.41Marchive → Blob, detachQueued 30 Jun
audit_log2024-053.92Marchive → Blob (digest-anchored)Queued 30 Jun
nhs_message_queue (history)2024-050.88Marchive → BlobQueued 30 Jun
all partitioned tables2026-07create-ahead (scheduler, monthly)Done 1 Jun
Schema migrations — latest
#MigrationScopeAppliedStatus
0184add_cds_screenings_runtime_coltenantUp10 Jun · 4sOK
0183ref_cds_bundle_2026_06_stagingglobal10 Jun · 88sOK
0182del_pod_evidence_hashtenantUp03 Jun · 2sOK
0181claim_rpt_claim_status_viewtenantUp27 May · 1sOK

One numbered sequence, tracked in schema_migrations · every file declares tenantUp(client, schema) or scope='global' — CI lint blocks unscoped + duplicate numbers · replayed against a scratch DB per PR.

Retention schedule per record class
ClassOnlineTotal retentionLegal hold
Clinical / dispensing records24 mo8-year class minimumsupported
Children's records24 moto 25th birthdaysupported
Electronic CD register24 mo11 yearssupported
Access / audit log (SCR-class)24 mo8 yearssupported
Operational logs24 moarchive then purge

Per-class retention metadata on every store; final values pend the RMCoP confirmation (OQ-8) — the store supports per-class policies either way.

Tenant schemas (schema-per-tenant, AD-4)
SchemaBranchesSizeMigration headStatus
allied377612 GB0184Active
(next group)0.2 GB0184Provisioned
public (ref_* reference data)global38 GBglobal scopeActive

Tenancy middleware pins search_path per request (setCompanyContext pattern) · crons use forEachTenant fan-out · no direct PMR ↔ StockIQ DB connections (constitutional ban).

Security ops — keys, secrets & policypmr-prod-kv · managed identities only 2 rotations due ≤30d
Secrets in vault42prod · staging holds 38 (no prod NHS creds)
Rotations due 30d2
KV access events today1,208all logged to audit
Replay rejections2deep-link jti · alarmed
Certificate & key rotation — Key Vault (HSM-backed, non-exportable)
Key / secretTypeCadenceLast rotatedNext dueOwnerStatus
nhs-api-signing-key (RS512, kid 2026-03)KV key — sign-via-API onlykid per NHS guidance · JWKS double-publish14 Mar 202614 Jul 2026nhs-gatewayDue 32d
StockIQ client-assertion secretKV secret12 months28 Jun 202528 Jun 2026integration-relayDue 16d
pmr-master-key (KEK)KV key — wraps DEKsannual or on suspicion · old versions kept for unwrap02 Sep 202502 Sep 2026platformOK
DEK — field encryption (v3)wrapped, TTL ≤1h in memoryon KEK rotation · lazy re-encrypt02 Sep 2025sweep 92% doneidentity moduleRe-encrypting
Blind-index HMAC keywrapped — separate from DEKannual02 Sep 202502 Sep 2026identity moduleOK
DB connection credentialsKV secret≤12 months or staff change12 Jan 202612 Jan 2027platformOK
NHS Notify webhook signing secretKV secret12 months03 Oct 202503 Oct 2026commsOK
TLS — app edge certFront Door managedauto 90d04 Apr 2026renews 03 JuledgeAuto
Redis access keyKV secret12 months09 Nov 202509 Nov 2026platformOK

Rotation is a runbook with zero-downtime double-publish (new+old valid during cutover) · no .env in production · private keys never exist outside the vault (sign-via-API) — no repo, home-directory or cloud-synced path ever holds key material (P-3).

Rate-limit policies (Redis-backed, config — changes audited)
ClassKeyLimitOn breach
General APIprincipal (userId + companyId)300 req/min429 + Retry-After
Auth (login / reset)per-IP (trusted edge header) + principal10 req/minlockout 10 fails → 15 min
Search / barcodeper-branch aggregate1,200 req/min429
NHS gateway outboundclient-side budgetper NHS quotabackoff + queue

Never keyed on upstream proxy IPs — CDN egress pools collapse branches into a few buckets (failure proven live on StockIQ).

CSP / CORS origin allow-lists
OriginPurposeMode
app.scriptiq.ukweb shellAllowed · credentialed
drivers.scriptiq.ukdriver app PWAAllowed
ordering.stockiq.ukdocumented cross-product callsAllowed
my.scriptiq.ukpatient portal (later phase)Staged — dark

No wildcards · pre-flight cached · CSP nonce-based, default-src 'self', frame-ancestors 'none' (enforce mode) · HSTS 2y + preload pending final eTLD+1 (OQ-6).

Token-exchange audit tail (RFC 8693 shape — server-to-server only)
TimeActorEventDetailResult
10:41A. Khan (Timperley)StockIQ token mintedaud stockiq-api · TTL 15 min · source pmr_serviceOK
10:41A. KhanDeep-link code redeemedjti single-use · return-URL allow-list ✓OK
10:38edge 91.2··Deep-link code replayjti already consumedRejected · alarmed
10:12T. Mills (Timperley)Logout cascaderefresh family revoked + 2 exchanged StockIQ tokens (source: pmr_service)Revoked
09:55scheduler (system actor)Client-assertion auth → StockIQrelay drain · 1,884 events todayOK

1,422 mints · 312 redemptions · 2 replays rejected today — browser only ever carries the single-use code; exchanged JWTs never leave the server.

Support triage — IssueIQTriage SLA: one working day 1 safety item awaiting CSO
Awaiting triage3oldest 2h 12m
Triage within SLA98%rolling 30d
Open defects142 release-blocking
Safety items (30d)21 closed — LFPSE submitted
Intake (6)Safety queue (1)TriagedClosed
TicketSourceReported bySummaryClassificationTriage dueStatus
ISS-2047shell bug reportAisha Khan · TimperleyLabel printed previous dose after clinical-check editPATIENT SAFETY13 Jun 09:12Safety queue — CSO
ISS-2046portal (via branch)counter · AltrinchamRepeat request page rejects valid NHS number 943 476 5919Untriaged13 Jun 08:55Awaiting triage
ISS-2045shell bug reportTom Mills (ACT) · TimperleyMDS tray label misaligned on second sheetDefect · P3metAssigned — eng
ISS-2044driver appSam Doyle · TimperleyRequest: reorder stops after failed deliveryRequestmetBacklog
ISS-2043EPOSbranch manager · SaleZ-read variance vs safe count £4.20Defect · P2metIn progress
ISS-2041shell bug reportlocum · HaleOwings card shows stale balance after partial supplyDefect · P2metFixed in 2026.23

Every intake is triaged within one working day into defect / request / possible patient-safety incident (D11.3) · the bug-report form's safety flag bypasses triage straight to the safety queue · tickets carry correlation id, release, branch + screen context automatically.

ISS-2047 — label printed previous dose after clinical-check editPATIENT SAFETYTriage SLA met — 2m
Report
Reported by
Received
Safety flag at intake
Release / screen
Correlation id
Subject

Description: dose edited at clinical check (1 BD → 1 OD); reprint used the pre-edit render. Caught by Tom Mills at barcode accuracy check — supply never left the bench.

Triage (one working day — due 13 Jun 09:12)
Classification *
Severity
CDS device implicated?
Assigned
Timeline
09:12Intake — shell bug report with safety flag · context auto-attached
09:14Auto-routed to safety queue (flag set — bypasses normal triage)Safety
09:40CSO acknowledged · LFPSE assessment started · HAZ-075 drafted in DCB0129 hazard log
10:05Eng repro confirmed — reprint cache keyed on pre-edit render hash · fix branchedDefect linked
WWKS2 robot registrystock-facade adapter — one protocol, all vendors 1 fault
Branches with robots6of 377
Adapters online41 fault · 1 commissioning
Robot outputs today1,214dispense picks
Avg output time9.8schute to bench
BranchVendor / modelProtocolAdapterCapabilitiesHeartbeatStatus
TimperleyBD Rowa Vmax 210WWKS2 2.01.6.2Output StockInfo Status ArticleInfo8s agoOnline
AltrinchamBD Rowa SmartWWKS2 2.01.6.2Output StockInfo Status12s agoOnline
SaleWillach Consis B3WWKS2 2.01.6.1Output Status10:58Fault — output chute 2
HaleOmnicell M5000WWKS2 2.01.6.2Output StockInfo Status5s agoOnline
DidsburyBD Rowa Vmax 130WWKS2 2.01.6.2Output StockInfo Status9s agoOnline
UrmstonBD Rowa Vmax 130WWKS2 2.01.6.2OutputCommissioning
Adapter config — Timperley (BD Rowa Vmax 210)
Endpoint
Dialogs enabled
Timeout / retry
Output mapping
Stock reconciliation
Site attribution

Robot/automation integration goes through the WWKS2 adapter in the stock-facade module — never bespoke per-vendor protocols in module code (02 §8) · robot stock counts reconcile against StockIQ branch stock, the single stock truth · adapter faults degrade to manual picking, never block dispensing.

EPS connected Queue 0 RP: A. Khan · since 08:55 NHS: R8003 · 41m Timperley spec 2026-06-12 · round-2 Synced · outbox 0