Skip to content

Commit 5aa9d13

Browse files
authored
Chore: [AEA-6055] - test post-dated, inc. change of pharmacy (#2419)
## Summary - 🤖 Operational or Infrastructure Change ### Details - test post-dated, inc. change of pharmacy
1 parent 947a785 commit 5aa9d13

File tree

3 files changed

+90
-3
lines changed

3 files changed

+90
-3
lines changed

packages/enrichPrescriptions/src/fhirUtils.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ type UpdateItem = {
1515
itemId: string
1616
lastUpdateDateTime: string
1717
latestStatus: string
18+
postDatedLastModifiedSetAt?: string
1819
}
1920

2021
type StatusUpdate = {

packages/enrichPrescriptions/src/statusUpdates.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ type UpdateItem = {
3030
itemId?: string
3131
lastUpdateDateTime: string
3232
latestStatus: string
33+
postDatedLastModifiedSetAt?: string
3334
}
3435

3536
type StatusUpdate = {
@@ -188,9 +189,11 @@ export function applyStatusUpdates(logger: Logger, searchsetBundle: Bundle, stat
188189
if (itemUpdates.length > 0) {
189190
logger.info(`Update found for MedicationRequest with id ${medicationRequestID}. Applying.`)
190191
// there may be > 1 updates, ensure picking the most recent
191-
itemUpdates.sort((a, b) =>
192-
moment(b.lastUpdateDateTime).utc().valueOf() - moment(a.lastUpdateDateTime).utc().valueOf()
193-
)
192+
itemUpdates.sort((a, b) => {
193+
const aTime = a.postDatedLastModifiedSetAt || a.lastUpdateDateTime
194+
const bTime = b.postDatedLastModifiedSetAt || b.lastUpdateDateTime
195+
return moment(bTime).utc().valueOf() - moment(aTime).utc().valueOf()
196+
})
194197
updateMedicationRequest(logger, medicationRequest, itemUpdates[0])
195198
} else {
196199
logger.info(`No update found for MedicationRequest with id ${medicationRequestID}. Applying default.`)

packages/enrichPrescriptions/tests/testStatusUpdate.test.ts

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,89 @@ describe("Unit tests for statusUpdate", function () {
100100
expect(requestBundle).toEqual(simpleResponseBundle())
101101
})
102102

103+
it("when with pharmacy, followed by 2 post-dated ready to collect updates are present, the latest RTC update is applied", async () => {
104+
// Note that GSUL should only return 1 update per status, so this is belt and braces
105+
const requestBundle = simpleRequestBundle()
106+
const statusUpdates = simpleStatusUpdatesPayload()
107+
108+
const itemId = "E76812CF-C893-42FF-AB02-B19EA1FA11B4"
109+
statusUpdates.prescriptions[0].items = [
110+
{
111+
isTerminalState: false,
112+
itemId: itemId,
113+
lastUpdateDateTime: "2026-01-26T17:00:00.000Z",
114+
latestStatus: "With Pharmacy"
115+
},
116+
{
117+
isTerminalState: false,
118+
itemId: itemId,
119+
lastUpdateDateTime: "2026-01-28T12:00:00.000Z",
120+
latestStatus: "Ready to Collect",
121+
postDatedLastModifiedSetAt: "2026-01-27T10:40:00.000Z"
122+
},
123+
{
124+
isTerminalState: false,
125+
itemId: itemId,
126+
lastUpdateDateTime: "2026-01-27T12:00:00.000Z",
127+
latestStatus: "Ready to Collect",
128+
postDatedLastModifiedSetAt: "2026-01-27T11:40:00.000Z"
129+
}
130+
]
131+
132+
applyStatusUpdates(logger, requestBundle, statusUpdates)
133+
134+
const prescriptionBundle = requestBundle.entry![0].resource as Bundle
135+
const medicationRequest = prescriptionBundle.entry![0].resource as MedicationRequest
136+
const statusExtension = medicationRequest.extension![0].extension!.find((e) => e.url === "status")
137+
138+
expect(statusExtension!.valueCoding!.code).toEqual("Ready to Collect")
139+
expect(medicationRequest.extension![0].extension![1].valueDateTime).toEqual("2026-01-27T12:00:00.000Z")
140+
})
141+
142+
it("when with pharmacy, followed by with pharmacy and post-dated ready to collect updates at different pharmacy shows RTC update", async () => {
143+
const requestBundle = simpleRequestBundle()
144+
const statusUpdates = simpleStatusUpdatesPayload()
145+
146+
const itemId = "E76812CF-C893-42FF-AB02-B19EA1FA11B4"
147+
statusUpdates.prescriptions[0].items = [
148+
{
149+
isTerminalState: false,
150+
itemId: itemId,
151+
lastUpdateDateTime: "2026-01-26T17:00:00.000Z",
152+
latestStatus: "With Pharmacy"
153+
},
154+
{
155+
isTerminalState: false,
156+
itemId: itemId,
157+
lastUpdateDateTime: "2026-01-28T12:00:00.000Z",
158+
latestStatus: "With Pharmacy",
159+
postDatedLastModifiedSetAt: "2026-01-27T10:40:00.000Z"
160+
},
161+
{
162+
isTerminalState: false,
163+
itemId: itemId,
164+
lastUpdateDateTime: "2026-01-27T12:00:00.000Z",
165+
latestStatus: "Ready to Collect"
166+
}
167+
]
168+
169+
const updatesWithOdsCode = statusUpdates as unknown as {
170+
prescriptions: Array<{items: Array<{odsCode?: string}>}>
171+
}
172+
updatesWithOdsCode.prescriptions[0].items[0].odsCode = "FA565"
173+
updatesWithOdsCode.prescriptions[0].items[1].odsCode = "A83008"
174+
updatesWithOdsCode.prescriptions[0].items[2].odsCode = "A83008"
175+
176+
applyStatusUpdates(logger, requestBundle, statusUpdates)
177+
178+
const prescriptionBundle = requestBundle.entry![0].resource as Bundle
179+
const medicationRequest = prescriptionBundle.entry![0].resource as MedicationRequest
180+
const statusExtension = medicationRequest.extension![0].extension!.find((e) => e.url === "status")
181+
182+
expect(statusExtension!.valueCoding!.code).toEqual("Ready to Collect")
183+
expect(medicationRequest.extension![0].extension![1].valueDateTime).toEqual("2026-01-27T12:00:00.000Z")
184+
})
185+
103186
it("when an update has a terminal state flag set to true, but is less than seven days old, the status is set as 'active'", async () => {
104187
const requestBundle = simpleRequestBundle()
105188
const statusUpdates = simpleStatusUpdatesPayload()

0 commit comments

Comments
 (0)