| 1 | GMRAPEM0 ;HIRMFO/WAA,FT-ALLERGY/ADVERSE REACTION PATIENT EDIT DRIVER ;9/22/06  09:35
 | 
|---|
| 2 |  ;;4.0;Adverse Reaction Tracking;**2,5,17,21,36**;Mar 29, 1996;Build 9
 | 
|---|
| 3 | EN11 ; Entry point for GMRA USER E/E PAT REC DATA option
 | 
|---|
| 4 |  ; GMRAUSER is a flag that indicates that this is a User
 | 
|---|
| 5 |  ; If user has Verifier Key then user will act normal
 | 
|---|
| 6 |  I '$D(^XUSEC("GMRA-ALLERGY VERIFY",DUZ)) S GMRAUSER=1
 | 
|---|
| 7 | EN1 ; Entry for ENTER/EDIT PATIENT REACTION DATA option
 | 
|---|
| 8 |  ; EDIT PATIENT A/AR (DFN UNK.)
 | 
|---|
| 9 |  S GMRAOUT=0
 | 
|---|
| 10 |  W @IOF D PAT^GMRAPAT ; Select A Patient
 | 
|---|
| 11 |  D:'GMRAOUT EN21 G:'GMRAOUT EN1
 | 
|---|
| 12 |  K DFN,DIC,GMRAOUT,GMRARET,GMA,GMRAUSER
 | 
|---|
| 13 |  D EXIT,EN1^GMRAKILL
 | 
|---|
| 14 |  Q
 | 
|---|
| 15 | EN21 ; Process patient data and determine if patient is NKA
 | 
|---|
| 16 |  S GMRAOUT=$G(GMRAOUT,0)
 | 
|---|
| 17 |  ; check patient assessment before enter/edit reaction
 | 
|---|
| 18 |  I $$NKA^GMRANKA(DFN),$$NKASCR^GMRANKA(DFN) D  ;delete 120.86 entry if assessment=yes, but no active reactions in 120.8
 | 
|---|
| 19 |  .N DA,DIK
 | 
|---|
| 20 |  .S DIK="^GMR(120.86,",DA=DFN D ^DIK
 | 
|---|
| 21 |  .Q
 | 
|---|
| 22 |  I '$$NKA^GMRANKA(DFN) D NKAASK^GMRANKA(DFN,.GMRAOUT) Q:GMRAOUT  I '$$NKA^GMRANKA(DFN) Q
 | 
|---|
| 23 |  L +^XTMP("GMRAED",DFN):1 I '$T D MESS^GMRAGUI1 Q  ;21
 | 
|---|
| 24 |  S GMRAOUT=0
 | 
|---|
| 25 |  D:'GMRAOUT SELECT
 | 
|---|
| 26 |  I $G(GMRAPA)'>0 S GMRAOUT=0
 | 
|---|
| 27 |  S GMRARP=1 I 'GMRAOUT D
 | 
|---|
| 28 |  .D ASK^GMRAUTL("Enter another Causative Agent? ",.GMRAOUT,.GMRARP)
 | 
|---|
| 29 |  .I 'GMRARP S GMRACNT=$O(^TMP($J,"GMRASF","B"),-1) D
 | 
|---|
| 30 |  ..I GMRACNT D SIGNOFF^GMRASIGN
 | 
|---|
| 31 |  ..I 'GMRAOUT D IDBAND^GMRASIGN
 | 
|---|
| 32 |  ..I GMRAOUT S GMRAOUT=2-GMRAOUT D:GMRAOUT&($D(^TMP($J,"GMRASF"))) ALERT^GMRASIGN K ^TMP($J,"GMRASF"),GMRACNT
 | 
|---|
| 33 |  ..Q
 | 
|---|
| 34 |  .Q
 | 
|---|
| 35 |  I GMRARP,'GMRAOUT K GMRARP L -^XTMP("GMRAED",DFN) G EN21 ;21
 | 
|---|
| 36 |  K GMRARP
 | 
|---|
| 37 |  ; check patient assessment when exiting enter/edit reaction
 | 
|---|
| 38 |  I $$NKA^GMRANKA(DFN),$$NKASCR^GMRANKA(DFN) D  ;delete 120.86 entry if assessment=yes, but no active reactions in 120.8
 | 
|---|
| 39 |  .N DA,DIK
 | 
|---|
| 40 |  .S DIK="^GMR(120.86,",DA=DFN D ^DIK
 | 
|---|
| 41 |  .Q
 | 
|---|
| 42 |  L -^XTMP("GMRAED",DFN) ;21
 | 
|---|
| 43 |  Q
 | 
|---|
| 44 | EN2 ; EDIT PATIENT A/AR (DFN KNOWN)
 | 
|---|
| 45 |  ; Called from the GMRAOR ALLERGY ENTER/EDIT protocol
 | 
|---|
| 46 |  I '$D(^XUSEC("GMRA-ALLERGY VERIFY",DUZ)) S GMRAUSER=1
 | 
|---|
| 47 |  N GMRAOUT
 | 
|---|
| 48 |  D EN21 D
 | 
|---|
| 49 |  .;N GMRAOUT
 | 
|---|
| 50 |  .D EXIT,EN1^GMRAKILL
 | 
|---|
| 51 |  .Q
 | 
|---|
| 52 |  K GMA,GMRARET,GMRAUSER
 | 
|---|
| 53 |  Q
 | 
|---|
| 54 | ALERT ; PROCESS ALERTS FOR ART
 | 
|---|
| 55 |  N DFN,GMRAPA,GMRACNT,GMRAOUT,GMRANEW,GMRAUSER
 | 
|---|
| 56 |  S (GMRACNT,GMRAOUT,GMRANEW)=0 D
 | 
|---|
| 57 |  .  I $G(XQADATA)="" S XQAKILL=0 Q
 | 
|---|
| 58 |  .  S DFN=$P(XQADATA,U),GMRAPA=$P(XQADATA,U,2),GMRAUSER=$P(XQADATA,U,3) Q:'DFN!'GMRAPA
 | 
|---|
| 59 |  .  I $D(^XUSEC("GMRA-ALLERGY VERIFY",DUZ)) K GMRAUSER
 | 
|---|
| 60 |  .  S GMRAPA(0)=$G(^GMR(120.8,GMRAPA,0)) Q:GMRAPA(0)=""
 | 
|---|
| 61 |  .  I $P(GMRAPA(0),U,12) D  Q
 | 
|---|
| 62 |  .  .  W !,"This reaction has been signed off.",$C(7)
 | 
|---|
| 63 |  .  .  D HANGT^GMRAPEH0
 | 
|---|
| 64 |  .  .  S XQAKILL=0
 | 
|---|
| 65 |  .  .  Q
 | 
|---|
| 66 |  .  D EDIT^GMRAPEM4
 | 
|---|
| 67 |  .  D UPDATE^GMRAPEM3
 | 
|---|
| 68 |  .  I '$P(GMRAPA(0),U,12) D SIGNOFF^GMRASIGN
 | 
|---|
| 69 |  .  I GMRAOUT S GMRAOUT=2-GMRAOUT K XQAKILL
 | 
|---|
| 70 |  .  E  D
 | 
|---|
| 71 |  .  .I $P(GMRAPA(0),U,12) S XQAKILL=0
 | 
|---|
| 72 |  .  .I '$P(GMRAPA(0),U,12) K XQAKILL
 | 
|---|
| 73 |  .  D EXIT,EN1^GMRAKILL
 | 
|---|
| 74 |  .  Q
 | 
|---|
| 75 |  Q
 | 
|---|
| 76 | SELECT ;Select a patient reaction
 | 
|---|
| 77 |  S GMRACNT=0 D 1^VADPT
 | 
|---|
| 78 |  S GMRALOC=$P(VAIN(4),U,2),GMRANAM=VADM(1),GMRASEX=VADM(5),GMRAOUT=0,GMRAOTH=$O(^GMRD(120.83,"B","OTHER REACTION",0)) D KVAR^VADPT K VA,VAROOT
 | 
|---|
| 79 |  K GMRADUP S GMRALAGO=1
 | 
|---|
| 80 |  D REACT^GMRAPAT(DFN) ; Load all reaction for this patient.
 | 
|---|
| 81 |  D EN1^GMRAPES0
 | 
|---|
| 82 |  I GMRAPA>0 D TYPE D
 | 
|---|
| 83 |  .I GMRAOUT D:$G(GMRANEW) DELETE S:'$$MISSREQ&('$P($G(GMRAPA(0)),U,12)) GMRAOUT=0,^TMP($J,"GMRASF","B",GMRAPA,GMRACNT)="",^TMP($J,"GMRASF",GMRACNT,GMRAPA)="" D:GMRAOUT UPOUT^GMRAPEM3 Q  ; 21,36
 | 
|---|
| 84 |  .I GMRAERR D ERR^GMRAPEM3 Q  ;The reaction was entered in error
 | 
|---|
| 85 |  .I $P(GMRAPA(0),U,12) D SIGNED^GMRAPEM3 Q  ;The reaction has been signed
 | 
|---|
| 86 |  .; Reaction is a new reaction or Update data
 | 
|---|
| 87 |  .D UPDATE^GMRAPEM3
 | 
|---|
| 88 |  .Q
 | 
|---|
| 89 |  Q
 | 
|---|
| 90 | TYPE ; Select the type of the process to use this reaction
 | 
|---|
| 91 |  S GMRAERR=0
 | 
|---|
| 92 |  ; If reaction is not new check to see if user want to enter in error
 | 
|---|
| 93 |  I 'GMRANEW W @IOF N GMRADFN D EN1^GMRAPEE0 I GMRAERR!GMRAOUT Q
 | 
|---|
| 94 |  ;If reaction is observed and signed off
 | 
|---|
| 95 |  I $P(GMRAPA(0),U,6)="o",$P(GMRAPA(0),U,12) D  Q:GMRAOUT
 | 
|---|
| 96 |  .Q:$G(GMRAUSER,0)
 | 
|---|
| 97 |  .N GMRARP
 | 
|---|
| 98 |  .S GMRARP=0 D ASK^GMRAUTL("DO YOU WISH TO EDIT OBSERVED DATA? ",.GMRAOUT,.GMRARP) Q:GMRAOUT
 | 
|---|
| 99 |  .Q:'GMRARP  ;Observed data
 | 
|---|
| 100 |  .N GMRAOD S GMRAOD=$D(^GMR(120.85,"C",GMRAPA)) ;Existing observation data?
 | 
|---|
| 101 | OBSDATE .;
 | 
|---|
| 102 |  .S GMRALAGO=1 F  D EN2^GMRAU85 Q:GMRAPA1>0  Q:GMRAOUT  W !,"You must enter a valid date or an Up-arrow to exit",!,$C(7)
 | 
|---|
| 103 |  .I 'GMRAOUT,GMRAPA1>0  D EN2^GMRAROBS
 | 
|---|
| 104 |  .I '$D(^GMR(120.85,"C",GMRAPA)),$G(GMRANEW)!('$G(GMRANEW)&($G(GMRAOD))) D OBSPROB S GMRAOUT=0 G OBSDATE
 | 
|---|
| 105 |  .Q
 | 
|---|
| 106 |  ;Verify data
 | 
|---|
| 107 |  I 'GMRAERR,$P($G(^GMR(120.8,GMRAPA,0)),U,16)=0,$P(GMRAPA(0),U,12)=1,$D(^XUSEC("GMRA-ALLERGY VERIFY",DUZ)) D  Q:GMRAOUT
 | 
|---|
| 108 |  .K GMRAVER S GMRAVER=0
 | 
|---|
| 109 |  .N GMRAPRNT D EN1^GMRAVFY K GMRALLER,GMRAMEC,GMRAY
 | 
|---|
| 110 |  .I $P($G(^GMR(120.8,GMRAPA,0)),U,16)=1 S GMRASLL(GMRAPA)=1
 | 
|---|
| 111 |  .Q
 | 
|---|
| 112 |  ;EDIT Verified data
 | 
|---|
| 113 |  I 'GMRAERR,$P($G(^GMR(120.8,GMRAPA,0)),U,16)=1,$D(^XUSEC("GMRA-ALLERGY VERIFY",DUZ)) D  Q:GMRAOUT
 | 
|---|
| 114 |  .Q:$G(GMRAVER)=1
 | 
|---|
| 115 |  .N GMRARP
 | 
|---|
| 116 |  .S GMRARP=0
 | 
|---|
| 117 |  .D ASK^GMRAUTL("DO YOU WISH TO EDIT VERIFIED DATA? ",.GMRAOUT,.GMRARP) Q:GMRAOUT
 | 
|---|
| 118 |  .D:GMRARP SITE^GMRAUTL,EN1^GMRAPED0
 | 
|---|
| 119 |  .Q
 | 
|---|
| 120 |  ;if the reaction is new or not signed off
 | 
|---|
| 121 |  I '$P(GMRAPA(0),U,12) D
 | 
|---|
| 122 |  .D EDIT^GMRAPEM4
 | 
|---|
| 123 |  .I $P($G(^GMR(120.8,GMRAPA,0)),U,16) S GMRASLL(GMRAPA)=1
 | 
|---|
| 124 |  .Q
 | 
|---|
| 125 |  Q
 | 
|---|
| 126 | EXIT S GMRAPA=0 F  S GMRAPA=$O(^TMP($J,"GMRASF","B",GMRAPA)) Q:GMRAPA<1  D UNLOCK^GMRAUTL(120.8,GMRAPA)
 | 
|---|
| 127 |  K ^TMP($J,"GMRASF")
 | 
|---|
| 128 |  K ^TMP($J,"GMRALST")
 | 
|---|
| 129 |  Q
 | 
|---|
| 130 |  ;
 | 
|---|
| 131 | DELETE ;Delete entry if required information is not entered - section added in 17
 | 
|---|
| 132 |  N DA,DIK,GMRAPA1
 | 
|---|
| 133 |  W !!,"Entry process not completed, deleting entry...",!
 | 
|---|
| 134 |  S GMRAPA1=$O(^GMR(120.85,"C",GMRAPA,0))
 | 
|---|
| 135 |  I GMRAPA1,$G(^GMR(120.85,GMRAPA1,0))="" K ^GMR(120.85,"C",GMRAPA,GMRAPA1)
 | 
|---|
| 136 |  I GMRAPA1 S DIK="^GMR(120.85,",DA=GMRAPA1 D ^DIK D UNLOCK^GMRAUTL(120.85,GMRAPA1)
 | 
|---|
| 137 |  I GMRAPA S DIK="^GMR(120.8,",DA=GMRAPA D ^DIK D UNLOCK^GMRAUTL(120.8,GMRAPA)
 | 
|---|
| 138 |  Q
 | 
|---|
| 139 |  ;
 | 
|---|
| 140 | OBSPROB ;Display help information for missing observed date/time entry
 | 
|---|
| 141 |  W !!,"Observed reactions must have at least one observation entry.",!,"If this reaction is incorrect then enter a date and then proceed",!,"to mark it as entered in error.",!
 | 
|---|
| 142 |  Q
 | 
|---|
| 143 |  ;
 | 
|---|
| 144 | MISSREQ() ;Function determines if required data is missing
 | 
|---|
| 145 |  N GMRA0,TYPE
 | 
|---|
| 146 |  S GMRA0=$G(^GMR(120.8,+$G(GMRAPA),0)) I GMRA0="" Q 1  ;Entry not found
 | 
|---|
| 147 |  S TYPE=$P(GMRA0,U,6) ;Get observed/historical
 | 
|---|
| 148 |  I TYPE="" Q 1  ;Type not entered
 | 
|---|
| 149 |  I TYPE="h" Q 0  ;Historical has no requirements
 | 
|---|
| 150 |  I TYPE="o" I '$D(^GMR(120.85,"C",GMRAPA))!('$O(^GMR(120.85,+$O(^GMR(120.85,"C",GMRAPA,0)),2,0)))!('$$REQCOM) Q 1  ;Missing obs date/time or sign/symptom or required comment
 | 
|---|
| 151 |  Q 0
 | 
|---|
| 152 |  ;
 | 
|---|
| 153 | REQCOM() ;Function determines if comments required
 | 
|---|
| 154 |  I '$D(GMRASITE) D SITE^GMRAUTL
 | 
|---|
| 155 |  I +$P(^GMRD(120.84,+GMRASITE,0),U,4)=0 Q 1  ;Comments required?
 | 
|---|
| 156 |  I $O(^GMR(120.8,GMRAPA,26,0)) Q 1
 | 
|---|
| 157 |  Q 0
 | 
|---|