Skip to content

Commit

Permalink
fix(fhir): deduplicate document references upstream of hapi operations
Browse files Browse the repository at this point in the history
Refs: #1667
Signed-off-by: Jonah Kaye <[email protected]>
  • Loading branch information
jonahkaye committed Jun 20, 2024
1 parent c4f9964 commit 4450687
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import {
makeDocumentReferenceWithMetriportId,
makeDocumentReference,
} from "./make-document-reference-with-metriport-id";
import { filterDocRefsWithMetriportId } from "../shared";
import { containsMetriportId } from "../shared";
import { faker } from "@faker-js/faker";

describe("filterDocRefsWithMetriportId", () => {
Expand All @@ -15,7 +15,7 @@ describe("filterDocRefsWithMetriportId", () => {
makeDocumentReferenceWithMetriportId({ metriportId: metriportId2 }),
];

const filteredDocRefs = filterDocRefsWithMetriportId(docRefs);
const filteredDocRefs = docRefs.filter(containsMetriportId);

expect(filteredDocRefs.length).toBe(2);
expect(filteredDocRefs[0].metriportId).toBe(metriportId1);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,9 @@ import { getCQData } from "../patient";
import {
cqToFHIR,
DocumentReferenceWithMetriportId,
filterDocRefsWithMetriportId,
containsMetriportId,
getContentTypeOrUnknown,
containsDuplicateMetriportId,
} from "./shared";
import { getDocumentReferenceContentTypeCounts } from "../../hie/get-docr-content-type-counts";
import { makeIHEGatewayV2 } from "../../ihe-gateway-v2/ihe-gateway-v2-factory";
Expand Down Expand Up @@ -262,6 +263,7 @@ async function getRespWithDocsToDownload({
response,
}: OutboundDocQueryRespParam): Promise<DqRespWithDocRefsWithMetriportId[]> {
const respWithDocsToDownload: DqRespWithDocRefsWithMetriportId[] = [];
const seenMetriportIds = new Set<string>();

await executeAsynchronously(
response,
Expand All @@ -273,8 +275,16 @@ async function getRespWithDocsToDownload({
response: gwResp,
});
const docRefs = resultsWithMetriportId.flatMap(result => result.documentReference ?? []);
const docRefsWithMetriportId = filterDocRefsWithMetriportId(docRefs);
const docsToDownload = await getNonExistentDocRefs(docRefsWithMetriportId, patientId, cxId);
const docRefsWithMetriportId = docRefs.filter(containsMetriportId);
const deduplicatedDocRefsWithMetriportId = docRefsWithMetriportId.filter(
docRef => !containsDuplicateMetriportId(docRef, seenMetriportIds)
);

const docsToDownload = await getNonExistentDocRefs(
deduplicatedDocRefsWithMetriportId,
patientId,
cxId
);

if (docsToDownload.length === 0) {
return;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import { formatDate } from "../shared";
import {
DocumentReferenceWithMetriportId,
containsMetriportId,
containsDuplicateMetriportId,
cqToFHIR,
dedupeContainedResources,
} from "./shared";
Expand Down Expand Up @@ -89,14 +90,20 @@ export async function processOutboundDocumentRetrievalResps({
source: MedicalDataSource.CAREQUALITY,
});

const seenMetriportIds = new Set<string>();

const resultPromises = await Promise.allSettled(
results.map(async docRetrievalResp => {
const docRefs = docRetrievalResp.documentReference;

if (docRefs) {
const validDocRefs = docRefs.filter(containsMetriportId);
const deduplicatedDocRefs = validDocRefs.filter(
docRef => !containsDuplicateMetriportId(docRef, seenMetriportIds)
);

await handleDocReferences(
validDocRefs,
deduplicatedDocRefs,
requestId,
patientId,
cxId,
Expand Down
16 changes: 10 additions & 6 deletions packages/api/src/external/carequality/document/shared.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,16 @@ export function containsMetriportId(
return docRef.metriportId != undefined;
}

export function filterDocRefsWithMetriportId(
documentReferences: DocumentReference[]
): DocumentReferenceWithMetriportId[] {
return documentReferences.filter((docRef): docRef is DocumentReferenceWithMetriportId => {
return docRef.metriportId != undefined;
});
export function containsDuplicateMetriportId(
docRef: DocumentReferenceWithMetriportId,
seenMetriportIds: Set<string>
): boolean {
if (seenMetriportIds.has(docRef.metriportId)) {
return true;
} else {
seenMetriportIds.add(docRef.metriportId);
return false;
}
}

export const cqToFHIR = (
Expand Down

0 comments on commit 4450687

Please sign in to comment.