| 1 | C0QGMRAD        ;HIRMFO/RM,WAA-UTILITY TO GATHER PATIENT DATA ;1/15/98  13:47 | 
|---|
| 2 | ;;4.0;Adverse Reaction Tracking;**2,10**;Mar 29, 1996;Build 23 | 
|---|
| 3 | EN1     ; ENTRY TO GATHER PATIENT A/AR DATA | 
|---|
| 4 | ;INPUT VARIABLES: | 
|---|
| 5 | ; | 
|---|
| 6 | ; DFN             Pointer to Patient file. | 
|---|
| 7 | ; GMRA (OPTIONAL) A^B^C   DEFAULT="0^0^111^0" **LOCAL | 
|---|
| 8 | ;    where  A = 0 return all reactions (allergic/non-allergic). | 
|---|
| 9 | ;               1 return allergies only. | 
|---|
| 10 | ;               2 return non-allergies only. | 
|---|
| 11 | ;           B = 0 return all data (verified or non-verified). | 
|---|
| 12 | ;               1 return only verified data. | 
|---|
| 13 | ;               2 return only non-verified data. | 
|---|
| 14 | ;           C = X_Y_Z | 
|---|
| 15 | ;               where X, Y, and Z are either 0 or 1.  1 would mean to | 
|---|
| 16 | ;               return an Adverse Reaction of that particular type, | 
|---|
| 17 | ;               and zero means do not return an Adverse Reaction of | 
|---|
| 18 | ;               that type. | 
|---|
| 19 | ;               X is for TYPE=OTHER | 
|---|
| 20 | ;               Y is for TYPE=FOOD | 
|---|
| 21 | ;               Z is for TYPE=DRUG. | 
|---|
| 22 | ;               E.g., 001 (return drug only), 111 (returns all types), | 
|---|
| 23 | ;               and 010 (returns food only). | 
|---|
| 24 | ;         **LOCAL | 
|---|
| 25 | ;           D = 0 return both Observed and Historical | 
|---|
| 26 | ;               1 return only Observed | 
|---|
| 27 | ;         **LOCAL | 
|---|
| 28 | ;OUTPUT VARIABLES: | 
|---|
| 29 | ; GMRAL = 1 if patient has Adverse Reaction | 
|---|
| 30 | ;         0 if patient has no known Adverse Reaction | 
|---|
| 31 | ;      null if patient has not been asked about Adverse Reaction | 
|---|
| 32 | ; GMRAL(PTR TO 120.8) = A^B^C^D^E^F^G^H^I | 
|---|
| 33 | ;    where A = Pointer to Patient file. | 
|---|
| 34 | ;          B = Free text of causative agent. | 
|---|
| 35 | ;         *C = Type of reaction, where D is drug, F is food, and O is | 
|---|
| 36 | ;              other. | 
|---|
| 37 | ;          D = 1 if Adverse Reaction has been verified | 
|---|
| 38 | ;              0 if Adverse Reaction has not been verified | 
|---|
| 39 | ;          E = 0 if this is an allergic reaction | 
|---|
| 40 | ;              1 if this is not an allergic reaction | 
|---|
| 41 | ;        **F = the mechanism of reaction in the format: | 
|---|
| 42 | ;              External format;Internal format | 
|---|
| 43 | ;              (ALLERGY;0, PHARMACOLOGIC;2, UNKNOWN;U). | 
|---|
| 44 | ;          G = Type of reaction. | 
|---|
| 45 | ;              where   D = drug | 
|---|
| 46 | ;                     DF = drug/food | 
|---|
| 47 | ;                    DFO = drug/food/other | 
|---|
| 48 | ;                     DO = drug/other | 
|---|
| 49 | ;                      F = food | 
|---|
| 50 | ;                     FO = food/other | 
|---|
| 51 | ;                      O = other | 
|---|
| 52 | ;          H = the mechanism of reaction in the format: | 
|---|
| 53 | ;              External format;Internal format | 
|---|
| 54 | ;              (ALLERGY;A, PHARMACOLOGIC;P, UNKNOWN;U) | 
|---|
| 55 | ;          I = IEN and Global root of reactant (stored in piece B above) | 
|---|
| 56 | ;              set equal to the GMR ALLERGY field (#1) of the PATIENT | 
|---|
| 57 | ;              ALLERGY file (#120.8) | 
|---|
| 58 | ; GMRAL(PTR TO 120.8,"S",COUNT) = S | 
|---|
| 59 | ;    where COUNT = number 1 to number of signs/symptoms for this | 
|---|
| 60 | ;                  reaction. | 
|---|
| 61 | ;              S = a sign/symptom for this reaction in the format: | 
|---|
| 62 | ;                  External format;Internal format | 
|---|
| 63 | ; | 
|---|
| 64 | ;*  NOTE: This piece will no longer be supported after 9/1/97, | 
|---|
| 65 | ;         Please use piece G. | 
|---|
| 66 | ;** NOTE: This piece will no longer be supported after 9/1/97, | 
|---|
| 67 | ;         Please use piece H. | 
|---|
| 68 | ; | 
|---|
| 69 | N GMRAOTH | 
|---|
| 70 | Q:'$D(DFN)  S:'$D(GMRA)#2 GMRA="0^0^111^1" K GMRAL | 
|---|
| 71 | DPT     ; | 
|---|
| 72 | ;Read NKA Node in file 120.86 | 
|---|
| 73 | S GMRAL=$P($G(^GMR(120.86,DFN,0)),U,2) | 
|---|
| 74 | ;Do not set GMRAL array if patient is unassessed or NKA. | 
|---|
| 75 | I GMRAL=0 Q  ;PATIENT HAS NO KNOWN ALLERGIES | 
|---|
| 76 | F GMRAREC=0:0 S GMRAREC=$O(^GMR(120.8,"B",DFN,GMRAREC)) Q:GMRAREC'>0  S GMRANODE=$S($D(^GMR(120.8,GMRAREC,0)):^(0),1:"") D:GMRANODE SETAL | 
|---|
| 77 | I GMRAL=1,+$O(GMRAL(0))'>0 S GMRAL=0 ;if flag is set to 1 (reactions exist), then make certain the reactions are passed in the GMRAL array | 
|---|
| 78 | K GMRA,GMRANODE,GMRAOSOF,GMRAREC,GMRATCNT | 
|---|
| 79 | Q | 
|---|
| 80 | SETAL   ; | 
|---|
| 81 | N %,GMRAI,GMRASIGN | 
|---|
| 82 | ;Q:'$P(GMRANODE,"^",12)&'$D(GMRAOSOF)  ;IF NOT SIGNED OFF MARK IT | 
|---|
| 83 | Q:+$G(^GMR(120.8,GMRAREC,"ER"))&'$D(GMRAERR)  ;IF ENTERED IN ERROR QUIT | 
|---|
| 84 | I GMRAL'=1 S GMRAL=1 ; PATIENT HAS ALLERGIES | 
|---|
| 85 | S GMRAI=0 ; BEGIN CHECK FOR ADR/ALL CRITERIA | 
|---|
| 86 | I $P(GMRA,"^",4),$P(GMRANODE,"^",6)="h" Q  ;QUIT IF HISTORICAL EXCLUDED  **LOCAL | 
|---|
| 87 | I '$P(GMRA,"^") S GMRAI=1 | 
|---|
| 88 | E  I $P(GMRA,"^")=1 S:$F("AU",$P(GMRANODE,"^",14))>1 GMRAI=1 | 
|---|
| 89 | E  S:$F("P",$P(GMRANODE,"^",14))>1 GMRAI=1 | 
|---|
| 90 | Q:'GMRAI  ; QUIT IF ADR/ALL CRITERIA NOT MET | 
|---|
| 91 | Q:2-$P(GMRA,"^",2)=(1-$P(GMRANODE,"^",16))  ;QUIT IF VER/NON VER CRITERIA NOT MET | 
|---|
| 92 | S GMRAI=0 ; BEGIN CHECK FOR ALLERGY TYPE CRITERIA | 
|---|
| 93 | F %=1:1:3 I $E($P(GMRA,"^",3),%),$P(GMRANODE,"^",20)[$E("OFD",%) S GMRAI=1 Q | 
|---|
| 94 | Q:'GMRAI  ; QUIT IF ALLERGY TYPE CRITERIA NOT MET | 
|---|
| 95 | D PASS(GMRAREC,.GMRAL) | 
|---|
| 96 | Q | 
|---|
| 97 | PASS(GMRAREC,GMRAL)     ; Data filer | 
|---|
| 98 | ; This subroutine will store all the patient date for a reaction is an | 
|---|
| 99 | ; array. | 
|---|
| 100 | ; Input: | 
|---|
| 101 | ;     GMRAREC = The IEN for the entry in 120.8 | 
|---|
| 102 | ;Output: | 
|---|
| 103 | ;     GMRAL(GMRAREC) the array entry for the record | 
|---|
| 104 | ; | 
|---|
| 105 | N GMRANODE | 
|---|
| 106 | S GMRANODE=$G(^GMR(120.8,GMRAREC,0)) Q:GMRANODE="" | 
|---|
| 107 | S %=$P(GMRANODE,"^",14) | 
|---|
| 108 | S GMRAL(GMRAREC)=$P(GMRANODE,"^",1,2)_"^"_$E($P(GMRANODE,"^",20))_"^"_+$P(GMRANODE,"^",16)_"^"_$S(%="A"!(%="U"):0,1:1) | 
|---|
| 109 | S GMRAL(GMRAREC)=GMRAL(GMRAREC)_"^"_$S(%="A":"ALLERGY;0",%="P":"PHARMACOLOGIC;2",%="U":"UNKNOWN;U",1:"")_"^"_$P(GMRANODE,"^",20)_"^"_$S(%="A":"ALLERGY;A",%="P":"PHARMACOLOGIC;P",%="U":"UNKNOWN;U",1:"") | 
|---|
| 110 | S GMRAL(GMRAREC)=GMRAL(GMRAREC)_"^"_$P(GMRANODE,"^",3) | 
|---|
| 111 | Q:'$O(^GMR(120.8,GMRAREC,10,0))  ;QUIT IF NO SIGNS/SYMPTOMS | 
|---|
| 112 | S:'$D(GMRAOTH) GMRAOTH=$O(^GMRD(120.83,"B","OTHER REACTION",0)) | 
|---|
| 113 | S GMRAX=0,GMRAY=1 F  S GMRAX=$O(^GMR(120.8,GMRAREC,10,GMRAX)) Q:GMRAX<1  D  I GMRAZ'="" S GMRAL(GMRAREC,"S",GMRAY)=GMRAZ(1),GMRAY=GMRAY+1 | 
|---|
| 114 | .S GMRAZ=$G(^GMR(120.8,GMRAREC,10,GMRAX,0)) | 
|---|
| 115 | .S GMRAZ(1)=$S(+GMRAZ'=GMRAOTH:$P($G(^GMRD(120.83,+GMRAZ,0)),U)_";"_+GMRAZ,1:$P(GMRAZ,U,2)_";"_+GMRAZ) | 
|---|
| 116 | .Q | 
|---|
| 117 | K GMRAX,GMRAY,GMRAZ | 
|---|
| 118 | Q | 
|---|