Skip to content

POC-1041 #1442

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Jun 4, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions programs/patient-data-resolver.service.js
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,10 @@ function checkTransferOut(patientUuid, params) {
}

function getMedicationRefillVisits(patientUuid) {
const expectedAdultReturnEncounter = '8d5b2be0-c2cc-11de-8d13-0010c6dffd0f';
const expectedEncounters = [
'8d5b2be0-c2cc-11de-8d13-0010c6dffd0f',
'4e7553b4-373d-452f-bc89-3f4ad9a01ce7'
];

const patientEncounters = encounterService.getPatientEncounters({
patientUuid,
Expand All @@ -134,7 +137,7 @@ function getMedicationRefillVisits(patientUuid) {
.filter(
(encounter) =>
encounter.encounterType &&
encounter.encounterType.uuid === expectedAdultReturnEncounter
expectedEncounters.includes(encounter.encounterType.uuid)
)
.sort(
(a, b) =>
Expand Down
14 changes: 7 additions & 7 deletions programs/patient-program-config.json
Original file line number Diff line number Diff line change
Expand Up @@ -736,8 +736,8 @@
},
{
"uuid": "a2a265dc-508d-4f31-94ee-0bf8a58049d7",
"name": "HCW-Peer Delivery Visit",
"allowedIf": "!isEligibleForCommunityVisit",
"name": "HCW/Peer Delivery Visit",
"allowedIf": "!isEligibleForCommunityVisit && !isFirstAMPATHHIVVisit",
"encounterTypes": [
{
"uuid": "987009c6-6f24-43f7-9640-c285d6553c63",
Expand Down Expand Up @@ -2980,8 +2980,8 @@
"visitTypes": [
{
"uuid": "0becf5b9-0522-47c8-960c-c9d660c56501",
"name": "Facilty Medication Delivery Visit",
"allowedIf": "qualifiesMedicationRefillVisit && isEligibleForMedicationRefill",
"name": "Facility Medication Refill Visit",
"allowedIf": "programLocation === intendedVisitLocationUuid && qualifiesMedicationRefillVisit && isEligibleForMedicationRefill",
"message": "Patient has to be in the location he enrolled into the HIV Care and Treatment program ",
"encounterTypes": [
{
Expand Down Expand Up @@ -3309,7 +3309,7 @@
{
"uuid": "3c1906a1-6d85-4184-9a43-0912cbac3d74",
"name": "Community Medication Delivery Visit",
"allowedIf": "qualifiesMedicationRefillVisit && isEligibleForCommunityVisit",
"allowedIf": "programLocation === intendedVisitLocationUuid && qualifiesMedicationRefillVisit && isEligibleForCommunityVisit",
"message": "Patient has to be in the location he enrolled into the HIV Care and Treatment program ",
"encounterTypes": [
{
Expand All @@ -3320,8 +3320,8 @@
},
{
"uuid": "a2a265dc-508d-4f31-94ee-0bf8a58049d7",
"name": "HCW-Peer Delivery Visit",
"allowedIf": "!isEligibleForCommunityVisit",
"name": "HCW/Peer Delivery Visit",
"allowedIf": "!isEligibleForCommunityVisit && !isFirstAMPATHHIVVisit",
"encounterTypes": [
{
"uuid": "987009c6-6f24-43f7-9640-c285d6553c63",
Expand Down
33 changes: 32 additions & 1 deletion programs/scope-builder.service.js
Original file line number Diff line number Diff line change
Expand Up @@ -431,15 +431,21 @@ function validateMedicationRefillEligibility(validateMedicationRefill) {

const icadAnswerUuid = '7e5e7759-e9f7-4b16-b904-041fcdddb390';

// Version 2.0 cutoff date
const VERSION_2_CUTOFF_DATE = new Date('2025-05-02');

let isEligibleForMedicationRefill = false;
let isEligibleForCommunityVisit = false;
let hasMedicationRefillConcept = false;

// Check if the new concepts exist in observations
for (const obs of validateMedicationRefill.obs) {
const conceptUuid = obs.concept?.uuid;

if (!conceptUuid) continue;

if (conceptUuid === conceptMap.medicationRefillEligibility) {
hasMedicationRefillConcept = true;
isEligibleForMedicationRefill = true;
}

Expand All @@ -451,9 +457,34 @@ function validateMedicationRefillEligibility(validateMedicationRefill) {
}
}

// Backwards compatibility logic for medicationRefillEligibility
if (!hasMedicationRefillConcept) {
const encounterDate = new Date(validateMedicationRefill.encounterDatetime);

// For encounters before version 2.0, default to eligible for medication refill
// This maintains the previous workflow where this validation didn't exist
if (encounterDate < VERSION_2_CUTOFF_DATE) {
isEligibleForMedicationRefill = true;
console.log(
'Legacy encounter detected - defaulting medicationRefill eligibility to true'
);
}
// For newer encounters without the concept
else {
console.warn(
'Recent encounter missing medicationRefillEligibility concept'
);
isEligibleForMedicationRefill = false;
}
}

return {
medicationRefill: isEligibleForMedicationRefill,
communityVisit: isEligibleForCommunityVisit
communityVisit: isEligibleForCommunityVisit,
isLegacyEncounter:
!hasMedicationRefillConcept &&
new Date(validateMedicationRefill.encounterDatetime) <
VERSION_2_CUTOFF_DATE
};
}

Expand Down