Skip to content

Commit c822f02

Browse files
committed
Restrict post to eid indentifier to ccc no or HEI no for those with one
1 parent 87e6551 commit c822f02

File tree

2 files changed

+142
-19
lines changed

2 files changed

+142
-19
lines changed

src/app/lab-order-search/lab-order-search-post.component.ts

Lines changed: 85 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,22 @@ import { HivSummaryService } from "../patient-dashboard/hiv/hiv-summary/hiv-summ
1818
import { ConceptResourceService } from "../openmrs-api/concept-resource.service";
1919
import { LabOrderPostService } from "./lab-order-post.service";
2020

21+
interface IdentifierType {
22+
format: string;
23+
formatDescription: string;
24+
name: string;
25+
uuid: string;
26+
validator: string;
27+
}
28+
29+
interface Identifier {
30+
identifier: string;
31+
identifierType: IdentifierType;
32+
preferred: boolean;
33+
uuid: string;
34+
display?: string;
35+
}
36+
2137
@Component({
2238
selector: "lab-order-search-post",
2339
templateUrl: "./lab-order-search-post.component.html",
@@ -75,6 +91,8 @@ export class LabOrderSearchPostComponent implements OnInit, OnChanges {
7591
public selectedSampleType: any;
7692
public dateReceived: any = Moment(new Date()).format("YYYY-MM-DD");
7793
public orderPostSuccessful: boolean;
94+
public cccIdentifierType = 'f2d6ff1a-8440-4d35-a150-1d4b5a930c5e';
95+
public heiIdentifierType = 'ead42a8f-203e-4b11-a942-df03a460d617';
7896

7997
constructor(
8098
private labOrdersSearchHelperService: LabOrdersSearchHelperService,
@@ -418,10 +436,33 @@ export class LabOrderSearchPostComponent implements OnInit, OnChanges {
418436
public processPatientIdentifiers() {
419437
const identifiers = [];
420438
return new Promise((resolve, reject) => {
421-
_.each(this.order.patient.identifiers, (identifier: any) => {
422-
this.setDefaultIdentifier(identifier);
423-
if (_.indexOf(identifier.display, "=") > 0) {
424-
identifiers.push(identifier.display.split("=")[1].trim());
439+
const patientIdentifiers: Identifier[] = this.order.patient.identifiers;
440+
let allowedIdentifiers = patientIdentifiers;
441+
const hasCccNo = this.hasIdentifier(
442+
this.cccIdentifierType,
443+
patientIdentifiers
444+
);
445+
const hasHeiNo = this.hasIdentifier(
446+
this.heiIdentifierType,
447+
patientIdentifiers
448+
);
449+
if (hasCccNo && !hasHeiNo) {
450+
allowedIdentifiers = patientIdentifiers.filter((i: Identifier) => {
451+
return i.identifierType.uuid === this.cccIdentifierType;
452+
});
453+
}
454+
if (hasHeiNo && !hasCccNo) {
455+
allowedIdentifiers = patientIdentifiers.filter((i: Identifier) => {
456+
return i.identifierType.uuid === this.heiIdentifierType;
457+
});
458+
}
459+
const defaultIdentifier: Identifier = this.selectDefaultIdentifier(
460+
allowedIdentifiers
461+
);
462+
this.setDefaultIdentifier(defaultIdentifier);
463+
_.each(allowedIdentifiers, (identifier: Identifier) => {
464+
if (_.indexOf(identifier.display, '=') > 0) {
465+
identifiers.push(identifier.display.split('=')[1].trim());
425466
} else {
426467
identifiers.push(identifier.identifier);
427468
}
@@ -436,10 +477,47 @@ export class LabOrderSearchPostComponent implements OnInit, OnChanges {
436477
this.reset = true;
437478
}
438479

439-
private setDefaultIdentifier(identifier: any) {
440-
if (identifier.preferred) {
441-
this.selectedIdentifier = identifier.identifier;
480+
public hasIdentifier(
481+
identifierType: string,
482+
patientIdentifiers: Identifier[]
483+
): boolean {
484+
return patientIdentifiers.some((identifier: Identifier) => {
485+
return identifier.identifierType.uuid === identifierType;
486+
});
487+
}
488+
489+
private selectDefaultIdentifier(identifiers: Identifier[]): Identifier {
490+
let defaultIdentifier: Identifier;
491+
let cccIdentifier: Identifier;
492+
let heiIdentifier: Identifier;
493+
let prefIdentifier: Identifier;
494+
495+
identifiers.forEach((i: Identifier) => {
496+
if (i.identifierType.uuid === this.cccIdentifierType) {
497+
cccIdentifier = i;
498+
}
499+
if (i.identifierType.uuid === this.heiIdentifierType) {
500+
heiIdentifier = i;
501+
}
502+
if (i.preferred) {
503+
prefIdentifier = i;
504+
}
505+
});
506+
507+
if (cccIdentifier) {
508+
defaultIdentifier = cccIdentifier;
509+
}
510+
if (heiIdentifier) {
511+
defaultIdentifier = heiIdentifier;
512+
}
513+
if (!cccIdentifier && !heiIdentifier && prefIdentifier) {
514+
defaultIdentifier = prefIdentifier;
442515
}
516+
return defaultIdentifier;
517+
}
518+
519+
private setDefaultIdentifier(identifier: Identifier): void {
520+
this.selectedIdentifier = identifier.identifier;
443521
}
444522

445523
private setDefaultLocation() {

src/app/patient-dashboard/common/lab-orders/lab-test-orders.component.ts

Lines changed: 57 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,22 @@ import { ClinicLabOrdersResourceService } from "../../../etl-api/clinic-lab-orde
1313
import { ObsResourceService } from "../../../openmrs-api/obs-resource.service";
1414
import { DatePipe } from "@angular/common";
1515

16+
interface IdentifierType {
17+
format: string;
18+
formatDescription: string;
19+
name: string;
20+
uuid: string;
21+
validator: string;
22+
}
23+
24+
interface Identifier {
25+
identifier: string;
26+
identifierType: IdentifierType;
27+
preferred: boolean;
28+
uuid: string;
29+
display?: string;
30+
}
31+
1632
@Component({
1733
selector: "lab-test-orders",
1834
templateUrl: "./lab-test-orders.html",
@@ -53,6 +69,8 @@ export class LabTestOrdersComponent implements OnInit, OnDestroy {
5369
public hideDateField = false;
5470
public disableButton = false;
5571
public maxDate = new Date();
72+
public heiIdentifierType = 'ead42a8f-203e-4b11-a942-df03a460d617';
73+
public cccIdentifierType = 'f2d6ff1a-8440-4d35-a150-1d4b5a930c5e';
5674
private _datePipe: DatePipe;
5775

5876
constructor(
@@ -86,19 +104,28 @@ export class LabTestOrdersComponent implements OnInit, OnDestroy {
86104
(patient) => {
87105
if (patient) {
88106
this.patient = patient;
89-
const amrsId = _.find(
90-
this.patient.identifiers.openmrsModel,
91-
(identifer: any) => {
92-
if (
93-
identifer.identifierType.uuid ===
94-
"58a4732e-1359-11df-a1f1-0026b9348838"
95-
) {
96-
return true;
97-
}
98-
}
107+
const identifiers = this.patient.identifiers.openmrsModel
108+
? this.patient.identifiers.openmrsModel
109+
: [];
110+
const hasCcc = this.hasIdentifierType(
111+
this.cccIdentifierType,
112+
identifiers
113+
);
114+
const hasHeiNo = this.hasIdentifierType(
115+
this.heiIdentifierType,
116+
identifiers
99117
);
100-
if (amrsId) {
101-
this.patientIdentifer = amrsId.identifier;
118+
if (hasCcc && !hasHeiNo) {
119+
this.patientIdentifer = this.getIdentifierByTypeUuid(
120+
this.cccIdentifierType,
121+
identifiers
122+
).identifier;
123+
}
124+
if (hasHeiNo && !hasCcc) {
125+
this.patientIdentifer = this.getIdentifierByTypeUuid(
126+
this.heiIdentifierType,
127+
identifiers
128+
).identifier;
102129
}
103130
this.getLabOrdersByPatientUuid();
104131
this.getPatientLabOrders();
@@ -107,6 +134,24 @@ export class LabTestOrdersComponent implements OnInit, OnDestroy {
107134
);
108135
}
109136

137+
public hasIdentifierType(
138+
identifierTypeUuid: string,
139+
identifiers: Identifier[]
140+
): boolean {
141+
return identifiers.some((i: Identifier) => {
142+
return i.identifierType.uuid === identifierTypeUuid;
143+
});
144+
}
145+
146+
public getIdentifierByTypeUuid(
147+
identifierTypeUuid: string,
148+
identifiers: Identifier[]
149+
): Identifier {
150+
return identifiers.find((i: Identifier) => {
151+
return i.identifierType.uuid === identifierTypeUuid;
152+
});
153+
}
154+
110155
public getPatientLabOrders() {
111156
this.fetchingResults = true;
112157
this.isBusy = true;

0 commit comments

Comments
 (0)