GMRAPEM0 ; HIRMFO/WAA,FT - ALLERGY/ADVERSE REACTION PATIENT EDIT DRIVER; October 18, 2023@08:47:00
;;4.0;Adverse Reaction Tracking;**2,5,17,21,36,50,58,63,51,68**;Mar 29, 1996;Build 5
;
; Reference to $$ONOFF^ORB3USER in ICR #7211
; Reference to CHKMEDS^ORWDAL32,GETPROV^ORWDAL32,SENDALRT^ORWDAL32 in ICR #6756
;
EN11 ; Entry point for GMRA USER E/E PAT REC DATA option
; GMRAUSER is a flag that indicates that this is a User
; If user has Verifier Key then user will act normal
I '$D(^XUSEC("GMRA-ALLERGY VERIFY",DUZ)) S GMRAUSER=1
;
EN1 ; Entry for ENTER/EDIT PATIENT REACTION DATA option
; EDIT PATIENT A/AR (DFN UNK.)
S GMRAOUT=0
W @IOF D PAT^GMRAPAT ; Select A Patient
D:'GMRAOUT EN21 G:'GMRAOUT EN1
K DFN,DIC,GMRAOUT,GMRARET,GMA,GMRAUSER
D EXIT,EN1^GMRAKILL
Q
;
EN21 ; Process patient data and determine if patient is NKA
S GMRAOUT=$G(GMRAOUT,0)
; check patient assessment before enter/edit reaction
I $$NKA^GMRANKA(DFN),$$NKASCR^GMRANKA(DFN) D ;delete 120.86 entry if assessment=yes, but no active reactions in 120.8
.N DA,DIK
.S DIK="^GMR(120.86,",DA=DFN D ^DIK
.Q
I '$$NKA^GMRANKA(DFN) D NKAASK^GMRANKA(DFN,.GMRAOUT) Q:GMRAOUT I '$$NKA^GMRANKA(DFN) Q
L +^XTMP("GMRAED",DFN):1 I '$T D MESS^GMRAGUI1 Q ;21
S GMRAOUT=0
D:'GMRAOUT SELECT
I $G(GMRAPA)'>0 S GMRAOUT=0
S GMRARP=1 I 'GMRAOUT D
.D ASK^GMRAUTL("Enter another Causative Agent? ",.GMRAOUT,.GMRARP)
.I 'GMRARP S GMRACNT=$O(^TMP($J,"GMRASF","B"),-1) D
..I GMRACNT D SIGNOFF^GMRASIGN
..I 'GMRAOUT D IDBAND^GMRASIGN
..I GMRAOUT S GMRAOUT=2-GMRAOUT D:GMRAOUT&($D(^TMP($J,"GMRASF"))) ALERT^GMRASIGN K ^TMP($J,"GMRASF"),GMRACNT
..Q
.Q
I GMRARP,'GMRAOUT K GMRARP L -^XTMP("GMRAED",DFN) G EN21 ;21
K GMRARP
; check patient assessment when exiting enter/edit reaction
I $$NKA^GMRANKA(DFN),$$NKASCR^GMRANKA(DFN) D ;delete 120.86 entry if assessment=yes, but no active reactions in 120.8
.N DA,DIK
.S DIK="^GMR(120.86,",DA=DFN D ^DIK
.Q
L -^XTMP("GMRAED",DFN) ;21
Q
;
EN2 ; EDIT PATIENT A/AR (DFN KNOWN)
; Called from the GMRAOR ALLERGY ENTER/EDIT protocol
I '$D(^XUSEC("GMRA-ALLERGY VERIFY",DUZ)) S GMRAUSER=1
N GMRAOUT
D EN21 D
.;N GMRAOUT
.D EXIT,EN1^GMRAKILL
.Q
K GMA,GMRARET,GMRAUSER
Q
;
ALERT ; PROCESS ALERTS FOR ART
N DFN,GMRAPA,GMRACNT,GMRAOUT,GMRANEW,GMRAUSER
S (GMRACNT,GMRAOUT,GMRANEW)=0 D
. I $G(XQADATA)="" S XQAKILL=0 Q
. S DFN=$P(XQADATA,U),GMRAPA=$P(XQADATA,U,2),GMRAUSER=$P(XQADATA,U,3) Q:'DFN!'GMRAPA
. I $D(^XUSEC("GMRA-ALLERGY VERIFY",DUZ)) K GMRAUSER
. S GMRAPA(0)=$G(^GMR(120.8,GMRAPA,0)) Q:GMRAPA(0)=""
. I $P(GMRAPA(0),U,12) D Q
. . W !,"This reaction has been signed off.",$C(7)
. . D HANGT^GMRAPEH0
. . S XQAKILL=0
. . Q
. D EDIT^GMRAPEM4
. D UPDATE^GMRAPEM3
. I '$P(GMRAPA(0),U,12) D SIGNOFF^GMRASIGN
. I GMRAOUT S GMRAOUT=2-GMRAOUT K XQAKILL
. E D
. .I $P(GMRAPA(0),U,12) S XQAKILL=0
. .I '$P(GMRAPA(0),U,12) K XQAKILL
. D EXIT,EN1^GMRAKILL
. Q
Q
;
SELECT ;Select a patient reaction
S GMRACNT=0 D 1^VADPT
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
K GMRADUP S GMRALAGO=1
D REACT^GMRAPAT(DFN) ; Load all reaction for this patient.
D EN1^GMRAPES0
I GMRAPA>0 D TYPE D
.I $G(GMRAEVT) D XQOR ;post event if anything edited ;P68
.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
.I GMRAERR D ERR^GMRAPEM3 Q ;The reaction was entered in error
.I $P(GMRAPA(0),U,12) D SIGNED^GMRAPEM3 Q ;The reaction has been signed
.; Reaction is a new reaction or Update data
.I GMRANEW D GMRACHK^GMRAPEM0(GMRAPA)
.I GMRANEW D MEDCHK ; NSR 20070203
.D UPDATE^GMRAPEM3
.Q
K GMRAEVT
Q
;
TYPE ; Select the type of the process to use this reaction
S GMRAERR=0,GMRAEVT=0 K GMRAPA1
; If reaction is not new check to see if user want to enter in error
I 'GMRANEW W @IOF N GMRADFN D EN1^GMRAPEE0 I GMRAERR!GMRAOUT Q
;If reaction is observed and signed off
I $P(GMRAPA(0),U,6)="o",$P(GMRAPA(0),U,12) D Q:GMRAOUT
.Q:$G(GMRAUSER,0)
.N GMRARP
.S GMRARP=0 D ASK^GMRAUTL("DO YOU WISH TO EDIT OBSERVED DATA? ",.GMRAOUT,.GMRARP) Q:GMRAOUT
.Q:'GMRARP ;Observed data
.N GMRAOD S GMRAOD=$D(^GMR(120.85,"C",GMRAPA)) ;Existing observation data?
OBSDATE .;
.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)
.I 'GMRAOUT,GMRAPA1>0 D EN2^GMRAROBS S:$P($G(^GMR(120.8,GMRAPA,0)),U,16)=1 GMRAEVT=1 ;P68
.I '$D(^GMR(120.85,"C",GMRAPA)),$G(GMRANEW)!('$G(GMRANEW)&($G(GMRAOD))) D OBSPROB S GMRAOUT=0 G OBSDATE
.Q
;Verify data
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
.K GMRAVER S GMRAVER=0
.N GMRAPRNT D EN1^GMRAVFY K GMRALLER,GMRAMEC,GMRAY
.I $P($G(^GMR(120.8,GMRAPA,0)),U,16)=1 S GMRASLL(GMRAPA)=1
.Q
;EDIT Verified data
I 'GMRAERR,$P($G(^GMR(120.8,GMRAPA,0)),U,16)=1,$D(^XUSEC("GMRA-ALLERGY VERIFY",DUZ)) D Q:GMRAOUT
.Q:$G(GMRAVER)=1
.N GMRARP
.S GMRARP=0
.D ASK^GMRAUTL("DO YOU WISH TO EDIT VERIFIED DATA? ",.GMRAOUT,.GMRARP) Q:GMRAOUT
.I GMRARP D SITE^GMRAUTL,EN1^GMRAPED0 S GMRAEVT=1 ;P68
.Q
;if the reaction is new or not signed off
I '$P(GMRAPA(0),U,12) D
.D EDIT^GMRAPEM4
.I $P($G(^GMR(120.8,GMRAPA,0)),U,16) S GMRASLL(GMRAPA)=1
.Q
Q
;
EXIT S GMRAPA=0 F S GMRAPA=$O(^TMP($J,"GMRASF","B",GMRAPA)) Q:GMRAPA<1 D UNLOCK^GMRAUTL(120.8,GMRAPA)
K ^TMP($J,"GMRASF")
K ^TMP($J,"GMRALST")
Q
;
DELETE ;Delete entry if required information is not entered - section added in 17
N DA,DIK,GMRAPA1
W !!,"Entry process not completed, deleting entry...",!
S GMRAPA1=$O(^GMR(120.85,"C",GMRAPA,0))
I GMRAPA1,$G(^GMR(120.85,GMRAPA1,0))="" K ^GMR(120.85,"C",GMRAPA,GMRAPA1)
I GMRAPA1 S DIK="^GMR(120.85,",DA=GMRAPA1 D ^DIK D UNLOCK^GMRAUTL(120.85,GMRAPA1)
I GMRAPA S DIK="^GMR(120.8,",DA=GMRAPA D ^DIK D UNLOCK^GMRAUTL(120.8,GMRAPA)
Q
;
OBSPROB ;Display help information for missing observed date/time entry
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.",!
Q
;
MISSREQ() ;Function determines if required data is missing
N GMRA0,TYPE
S GMRA0=$G(^GMR(120.8,+$G(GMRAPA),0)) I GMRA0="" Q 1 ;Entry not found
S TYPE=$P(GMRA0,U,6) ;Get observed/historical
I TYPE="" Q 1 ;Type not entered
I TYPE="h" Q 0 ;Historical has no requirements
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
Q 0
;
REQCOM() ;Function determines if comments required
I '$D(GMRASITE) D SITE^GMRAUTL
I +$P(^GMRD(120.84,+GMRASITE,0),U,4)=0 Q 1 ;Comments required?
I $O(^GMR(120.8,GMRAPA,26,0)) Q 1
Q 0
;
GMRACHK(GMRAPA) ;
;Send a warning MailMan message if the VA DRUG CLASS field is empty.
;Get the first, if any,VA DRUG CLASS entries for this agent.
N PATALLER,VADRCL1,PATNAME,REAC,REACTS,LINE
N PATIEN,SSN,LAST4
D GETS^DIQ(120.8,GMRAPA_",","**","E","PATALLER")
;mod by CAS - to skip all but "D" Drug type reactions
I $P($G(^GMR(120.8,GMRAPA,0)),"^",20)'["D" Q
S VADRCL1=$G(PATALLER(120.803,"1,"_GMRAPA_",",.01,"E"))
S PATNAME=$G(PATALLER(120.8,GMRAPA_",",.01,"E"))
S PATIEN=$$GET1^DIQ(120.8,GMRAPA,.01,"I")
S SSN=$$GET1^DIQ(2,PATIEN,.09,"E")
S LAST4=$E(PATNAME,1,1)_$E(SSN,6,9)
I '$G(GMRAERR),(VADRCL1=""),(PATNAME'="") D
. K ^XTMP("GMRACHK",$J)
. S LINE=1
. S ^XTMP("GMRACHK",$J,LINE)="The following allergy/adverse reaction may need a VA DRUG CLASS added"
. S LINE=LINE+1
. S ^XTMP("GMRACHK",$J,LINE)="for the following Patient:"
. S LINE=LINE+1
. S ^XTMP("GMRACHK",$J,LINE)=""
. S LINE=LINE+1
. S ^XTMP("GMRACHK",$J,LINE)="Patient: "_PATNAME
. S LINE=LINE+1
. S ^XTMP("GMRACHK",$J,LINE)="LAST4: "_LAST4
. S LINE=LINE+1
. S ^XTMP("GMRACHK",$J,LINE)="Reactant: "_$G(PATALLER(120.8,GMRAPA_",",.02,"E"))
. S LINE=LINE+1
. ;Build a pretty string of reactions
. S REAC=1
. S REACTS=$G(PATALLER(120.81,REAC_","_GMRAPA_",",.01,"E"))
. S REAC=REAC+1
. F Q:'$D(PATALLER(120.81,REAC_","_GMRAPA_",",.01,"E")) D
. . S REACTS=REACTS_", "_$G(PATALLER(120.81,REAC_","_GMRAPA_",",.01,"E"))
. . S REAC=REAC+1
. S ^XTMP("GMRACHK",$J,LINE)="Reactions: "_REACTS
. S LINE=LINE+1
. S ^XTMP("GMRACHK",$J,LINE)="OBS/HIS: "_$G(PATALLER(120.8,GMRAPA_",",6,"E"))
. S LINE=LINE+1
. S ^XTMP("GMRACHK",$J,LINE)="Location: "_$$GET1^DIQ(405,$$GET1^DIQ(2,DFN,.102,"I"),.06,"E")
. S LINE=LINE+1
. S XMDUZ=DUZ
. S XMTEXT="^XTMP(""GMRACHK"","_$J_","
. I $G(DUZ(2))="" S DUZ(2)=+$$STA^XUAF4($$KSP^XUPARAM("INST"))
. S XMSUB="ALLERGY/ADVERSE REACTION WITHOUT VA DRUG CLASS ("
. S XMSUB=XMSUB_$P($$NS^XUAF4(DUZ(2)),U)_")"
. S XMY("G.ADVERSE_ALLERGY_WARNING")=""
. D ^XMD
. K ^XTMP("GMRACHK",$J)
Q
;
MEDCHK ; NSR 20070203
N GMRAMCHK
W !!,?2,"Checking new allergy against the patient's active medication profile . . . "
D CHKMEDS^ORWDAL32(.GMRAMCHK,$P(GMRAPA(0),"^"),$P(GMRAPA(0),"^",2))
I GMRAMCHK'>0 W !!,?2,"No conflicts were discovered.",! K GMRAMCHK Q
I GMRAMCHK>0 D
. N GMRADA,GMRAYN,GMRAPROV,GMRASEND,GMRASLST,GMRALST,GMRAORD,GMRADUZ,GMRAOUT
. W !!,?2,"The following Active Orders contain "_$P(GMRAPA(0),"^",2)_":"
. S GMRADA=""
. F S GMRADA=$O(GMRAMCHK(GMRADA)) Q:GMRADA="" I $D(GMRAMCHK(GMRADA)) D
. . W !!,$P(GMRAMCHK(GMRADA),"^",3)_" (Order #"_$P(GMRAMCHK(GMRADA),"^")_") An alert will be sent to:"
. . D GETPROV^ORWDAL32(.GMRAPROV,$P(GMRAMCHK(GMRADA),"^"),+$G(DFN))
. . N PRVDA S PRVDA=""
. . F S PRVDA=$O(GMRAPROV(PRVDA)) Q:PRVDA="" I $D(GMRAPROV(PRVDA)) D
. . . S GMRASLST($P(GMRAMCHK(GMRADA),"^"),$P(GMRAPROV(PRVDA),";"))=GMRAPROV(PRVDA)
. . . W !?3,$P(GMRAPROV(PRVDA),"^",2)," - ",$P(GMRAPROV(PRVDA),"^",3)
. . K GMRAPROV
. W !!
. S (GMRAOUT,GMRAYN)=0 D ASK^GMRAUTL("Do you wish to send the alert(s) to additional recipients? ",.GMRAOUT,.GMRAYN) Q:GMRAOUT
. I GMRAYN D ADDSTHR(.GMRALST)
. I $D(GMRASLST) S GMRAORD="" F S GMRAORD=$O(GMRASLST(GMRAORD)) Q:GMRAORD="" I $D(GMRASLST(GMRAORD)) D
. . K GMRAPROV
. . S GMRAPROV=""
. . I $D(GMRALST) M GMRAPROV=GMRALST
. . D SENDALRT^ORWDAL32(.GMRASEND,GMRAORD,.GMRAPROV)
. K GMRASEND,GMRASLST
K GMRAMCHK
Q
;
ADDSTHR(GMRALST) ; NSR 20070203
K GMRALST
N DIC,I,GMRAYN,GMRAON,GMRANOTE,GMRAOUT,Y
S GMRAYN=0
S GMRANOTE=88 ;NEW ALLERGY ENTERED/ACTIVE MED notification
F I=1:1 D Q:'GMRAYN
. S DIC="^VA(200,",DIC(0)="AEBQ"
. S DIC("A")="Enter Recipient's Name: " D ^DIC
. I +Y>0 D
. . S GMRAON=$P($$ONOFF^ORB3USER(GMRANOTE,+Y,"","",""),U,1)
. . I GMRAON="OFF" W !!," User is unable to receive the notification!",! Q
. . S GMRALST($P(Y,"^"))=$P(Y,"^")_";VA(200,"_"^"_$P(Y,"^",2) K DIC,Y
. S (GMRAOUT,GMRAYN)=0 D ASK^GMRAUTL("Add another recipient? ",.GMRAOUT,.GMRAYN) Q:GMRAOUT
Q
;
XQOR ; GMRA EDIT VERIFIED DATA event driver ;P68
N X S X=+$O(^ORD(101,"B","GMRA EDIT VERIFIED DATA",0))_";ORD(101,"
Q:'X Q:'$G(GMRAPA)
S:'$D(GMRAPA(0)) GMRAPA(0)=$G(^GMR(120.8,+GMRAPA,0))
I $D(GMRAPA1) D
. S:$G(GMRAPA1)>0 GMRAPA1(0)=$G(^GMR(120.85,+GMRAPA1,0))
. ; cleanup GMRAPA1 if no selection (carried over from last edit)
. I $G(GMRAPA1)<0!($P(GMRAPA1(0),U,15)'=GMRAPA) K GMRAPA1
D:X EN^XQOR
Q
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HGMRAPEM0 11601 printed Oct 16, 2024@17:40:47 Page 2
GMRAPEM0 ; HIRMFO/WAA,FT - ALLERGY/ADVERSE REACTION PATIENT EDIT DRIVER; October 18, 2023@08:47:00
+1 ;;4.0;Adverse Reaction Tracking;**2,5,17,21,36,50,58,63,51,68**;Mar 29, 1996;Build 5
+2 ;
+3 ; Reference to $$ONOFF^ORB3USER in ICR #7211
+4 ; Reference to CHKMEDS^ORWDAL32,GETPROV^ORWDAL32,SENDALRT^ORWDAL32 in ICR #6756
+5 ;
EN11 ; Entry point for GMRA USER E/E PAT REC DATA option
+1 ; GMRAUSER is a flag that indicates that this is a User
+2 ; If user has Verifier Key then user will act normal
+3 IF '$DATA(^XUSEC("GMRA-ALLERGY VERIFY",DUZ))
SET GMRAUSER=1
+4 ;
EN1 ; Entry for ENTER/EDIT PATIENT REACTION DATA option
+1 ; EDIT PATIENT A/AR (DFN UNK.)
+2 SET GMRAOUT=0
+3 ; Select A Patient
WRITE @IOF
DO PAT^GMRAPAT
+4 if 'GMRAOUT
DO EN21
if 'GMRAOUT
GOTO EN1
+5 KILL DFN,DIC,GMRAOUT,GMRARET,GMA,GMRAUSER
+6 DO EXIT
DO EN1^GMRAKILL
+7 QUIT
+8 ;
EN21 ; Process patient data and determine if patient is NKA
+1 SET GMRAOUT=$GET(GMRAOUT,0)
+2 ; check patient assessment before enter/edit reaction
+3 ;delete 120.86 entry if assessment=yes, but no active reactions in 120.8
IF $$NKA^GMRANKA(DFN)
IF $$NKASCR^GMRANKA(DFN)
Begin DoDot:1
+4 NEW DA,DIK
+5 SET DIK="^GMR(120.86,"
SET DA=DFN
DO ^DIK
+6 QUIT
End DoDot:1
+7 IF '$$NKA^GMRANKA(DFN)
DO NKAASK^GMRANKA(DFN,.GMRAOUT)
if GMRAOUT
QUIT
IF '$$NKA^GMRANKA(DFN)
QUIT
+8 ;21
LOCK +^XTMP("GMRAED",DFN):1
IF '$TEST
DO MESS^GMRAGUI1
QUIT
+9 SET GMRAOUT=0
+10 if 'GMRAOUT
DO SELECT
+11 IF $GET(GMRAPA)'>0
SET GMRAOUT=0
+12 SET GMRARP=1
IF 'GMRAOUT
Begin DoDot:1
+13 DO ASK^GMRAUTL("Enter another Causative Agent? ",.GMRAOUT,.GMRARP)
+14 IF 'GMRARP
SET GMRACNT=$ORDER(^TMP($JOB,"GMRASF","B"),-1)
Begin DoDot:2
+15 IF GMRACNT
DO SIGNOFF^GMRASIGN
+16 IF 'GMRAOUT
DO IDBAND^GMRASIGN
+17 IF GMRAOUT
SET GMRAOUT=2-GMRAOUT
if GMRAOUT&($DATA(^TMP($JOB,"GMRASF")))
DO ALERT^GMRASIGN
KILL ^TMP($JOB,"GMRASF"),GMRACNT
+18 QUIT
End DoDot:2
+19 QUIT
End DoDot:1
+20 ;21
IF GMRARP
IF 'GMRAOUT
KILL GMRARP
LOCK -^XTMP("GMRAED",DFN)
GOTO EN21
+21 KILL GMRARP
+22 ; check patient assessment when exiting enter/edit reaction
+23 ;delete 120.86 entry if assessment=yes, but no active reactions in 120.8
IF $$NKA^GMRANKA(DFN)
IF $$NKASCR^GMRANKA(DFN)
Begin DoDot:1
+24 NEW DA,DIK
+25 SET DIK="^GMR(120.86,"
SET DA=DFN
DO ^DIK
+26 QUIT
End DoDot:1
+27 ;21
LOCK -^XTMP("GMRAED",DFN)
+28 QUIT
+29 ;
EN2 ; EDIT PATIENT A/AR (DFN KNOWN)
+1 ; Called from the GMRAOR ALLERGY ENTER/EDIT protocol
+2 IF '$DATA(^XUSEC("GMRA-ALLERGY VERIFY",DUZ))
SET GMRAUSER=1
+3 NEW GMRAOUT
+4 DO EN21
Begin DoDot:1
+5 ;N GMRAOUT
+6 DO EXIT
DO EN1^GMRAKILL
+7 QUIT
End DoDot:1
+8 KILL GMA,GMRARET,GMRAUSER
+9 QUIT
+10 ;
ALERT ; PROCESS ALERTS FOR ART
+1 NEW DFN,GMRAPA,GMRACNT,GMRAOUT,GMRANEW,GMRAUSER
+2 SET (GMRACNT,GMRAOUT,GMRANEW)=0
Begin DoDot:1
+3 IF $GET(XQADATA)=""
SET XQAKILL=0
QUIT
+4 SET DFN=$PIECE(XQADATA,U)
SET GMRAPA=$PIECE(XQADATA,U,2)
SET GMRAUSER=$PIECE(XQADATA,U,3)
if 'DFN!'GMRAPA
QUIT
+5 IF $DATA(^XUSEC("GMRA-ALLERGY VERIFY",DUZ))
KILL GMRAUSER
+6 SET GMRAPA(0)=$GET(^GMR(120.8,GMRAPA,0))
if GMRAPA(0)=""
QUIT
+7 IF $PIECE(GMRAPA(0),U,12)
Begin DoDot:2
+8 WRITE !,"This reaction has been signed off.",$CHAR(7)
+9 DO HANGT^GMRAPEH0
+10 SET XQAKILL=0
+11 QUIT
End DoDot:2
QUIT
+12 DO EDIT^GMRAPEM4
+13 DO UPDATE^GMRAPEM3
+14 IF '$PIECE(GMRAPA(0),U,12)
DO SIGNOFF^GMRASIGN
+15 IF GMRAOUT
SET GMRAOUT=2-GMRAOUT
KILL XQAKILL
+16 IF '$TEST
Begin DoDot:2
+17 IF $PIECE(GMRAPA(0),U,12)
SET XQAKILL=0
+18 IF '$PIECE(GMRAPA(0),U,12)
KILL XQAKILL
End DoDot:2
+19 DO EXIT
DO EN1^GMRAKILL
+20 QUIT
End DoDot:1
+21 QUIT
+22 ;
SELECT ;Select a patient reaction
+1 SET GMRACNT=0
DO 1^VADPT
+2 SET GMRALOC=$PIECE(VAIN(4),U,2)
SET GMRANAM=VADM(1)
SET GMRASEX=VADM(5)
SET GMRAOUT=0
SET GMRAOTH=$ORDER(^GMRD(120.83,"B","OTHER REACTION",0))
DO KVAR^VADPT
KILL VA,VAROOT
+3 KILL GMRADUP
SET GMRALAGO=1
+4 ; Load all reaction for this patient.
DO REACT^GMRAPAT(DFN)
+5 DO EN1^GMRAPES0
+6 IF GMRAPA>0
DO TYPE
Begin DoDot:1
+7 ;post event if anything edited ;P68
IF $GET(GMRAEVT)
DO XQOR
+8 ; 21,36
IF GMRAOUT
if $GET(GMRANEW)
DO DELETE
if '$$MISSREQ&('$PIECE($GET(GMRAPA(0)),U,12))
SET GMRAOUT=0
SET ^TMP($JOB,"GMRASF","B",GMRAPA,GMRACNT)=""
SET ^TMP($JOB,"GMRASF",GMRACNT,GMRAPA)=""
if GMRAOUT
DO UPOUT^GMRAPEM3
QUIT
+9 ;The reaction was entered in error
IF GMRAERR
DO ERR^GMRAPEM3
QUIT
+10 ;The reaction has been signed
IF $PIECE(GMRAPA(0),U,12)
DO SIGNED^GMRAPEM3
QUIT
+11 ; Reaction is a new reaction or Update data
+12 IF GMRANEW
DO GMRACHK^GMRAPEM0(GMRAPA)
+13 ; NSR 20070203
IF GMRANEW
DO MEDCHK
+14 DO UPDATE^GMRAPEM3
+15 QUIT
End DoDot:1
+16 KILL GMRAEVT
+17 QUIT
+18 ;
TYPE ; Select the type of the process to use this reaction
+1 SET GMRAERR=0
SET GMRAEVT=0
KILL GMRAPA1
+2 ; If reaction is not new check to see if user want to enter in error
+3 IF 'GMRANEW
WRITE @IOF
NEW GMRADFN
DO EN1^GMRAPEE0
IF GMRAERR!GMRAOUT
QUIT
+4 ;If reaction is observed and signed off
+5 IF $PIECE(GMRAPA(0),U,6)="o"
IF $PIECE(GMRAPA(0),U,12)
Begin DoDot:1
+6 if $GET(GMRAUSER,0)
QUIT
+7 NEW GMRARP
+8 SET GMRARP=0
DO ASK^GMRAUTL("DO YOU WISH TO EDIT OBSERVED DATA? ",.GMRAOUT,.GMRARP)
if GMRAOUT
QUIT
+9 ;Observed data
if 'GMRARP
QUIT
+10 ;Existing observation data?
NEW GMRAOD
SET GMRAOD=$DATA(^GMR(120.85,"C",GMRAPA))
OBSDATE ;
+1 SET GMRALAGO=1
FOR
DO EN2^GMRAU85
if GMRAPA1>0
QUIT
if GMRAOUT
QUIT
WRITE !,"You must enter a valid date or an Up-arrow to exit",!,$CHAR(7)
+2 ;P68
IF 'GMRAOUT
IF GMRAPA1>0
DO EN2^GMRAROBS
if $PIECE($GET(^GMR(120.8,GMRAPA,0)),U,16)=1
SET GMRAEVT=1
+3 IF '$DATA(^GMR(120.85,"C",GMRAPA))
IF $GET(GMRANEW)!('$GET(GMRANEW)&($GET(GMRAOD)))
DO OBSPROB
SET GMRAOUT=0
GOTO OBSDATE
+4 QUIT
End DoDot:1
if GMRAOUT
QUIT
+5 ;Verify data
+6 IF 'GMRAERR
IF $PIECE($GET(^GMR(120.8,GMRAPA,0)),U,16)=0
IF $PIECE(GMRAPA(0),U,12)=1
IF $DATA(^XUSEC("GMRA-ALLERGY VERIFY",DUZ))
Begin DoDot:1
+7 KILL GMRAVER
SET GMRAVER=0
+8 NEW GMRAPRNT
DO EN1^GMRAVFY
KILL GMRALLER,GMRAMEC,GMRAY
+9 IF $PIECE($GET(^GMR(120.8,GMRAPA,0)),U,16)=1
SET GMRASLL(GMRAPA)=1
+10 QUIT
End DoDot:1
if GMRAOUT
QUIT
+11 ;EDIT Verified data
+12 IF 'GMRAERR
IF $PIECE($GET(^GMR(120.8,GMRAPA,0)),U,16)=1
IF $DATA(^XUSEC("GMRA-ALLERGY VERIFY",DUZ))
Begin DoDot:1
+13 if $GET(GMRAVER)=1
QUIT
+14 NEW GMRARP
+15 SET GMRARP=0
+16 DO ASK^GMRAUTL("DO YOU WISH TO EDIT VERIFIED DATA? ",.GMRAOUT,.GMRARP)
if GMRAOUT
QUIT
+17 ;P68
IF GMRARP
DO SITE^GMRAUTL
DO EN1^GMRAPED0
SET GMRAEVT=1
+18 QUIT
End DoDot:1
if GMRAOUT
QUIT
+19 ;if the reaction is new or not signed off
+20 IF '$PIECE(GMRAPA(0),U,12)
Begin DoDot:1
+21 DO EDIT^GMRAPEM4
+22 IF $PIECE($GET(^GMR(120.8,GMRAPA,0)),U,16)
SET GMRASLL(GMRAPA)=1
+23 QUIT
End DoDot:1
+24 QUIT
+25 ;
EXIT SET GMRAPA=0
FOR
SET GMRAPA=$ORDER(^TMP($JOB,"GMRASF","B",GMRAPA))
if GMRAPA<1
QUIT
DO UNLOCK^GMRAUTL(120.8,GMRAPA)
+1 KILL ^TMP($JOB,"GMRASF")
+2 KILL ^TMP($JOB,"GMRALST")
+3 QUIT
+4 ;
DELETE ;Delete entry if required information is not entered - section added in 17
+1 NEW DA,DIK,GMRAPA1
+2 WRITE !!,"Entry process not completed, deleting entry...",!
+3 SET GMRAPA1=$ORDER(^GMR(120.85,"C",GMRAPA,0))
+4 IF GMRAPA1
IF $GET(^GMR(120.85,GMRAPA1,0))=""
KILL ^GMR(120.85,"C",GMRAPA,GMRAPA1)
+5 IF GMRAPA1
SET DIK="^GMR(120.85,"
SET DA=GMRAPA1
DO ^DIK
DO UNLOCK^GMRAUTL(120.85,GMRAPA1)
+6 IF GMRAPA
SET DIK="^GMR(120.8,"
SET DA=GMRAPA
DO ^DIK
DO UNLOCK^GMRAUTL(120.8,GMRAPA)
+7 QUIT
+8 ;
OBSPROB ;Display help information for missing observed date/time entry
+1 WRITE !!,"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.",!
+2 QUIT
+3 ;
MISSREQ() ;Function determines if required data is missing
+1 NEW GMRA0,TYPE
+2 ;Entry not found
SET GMRA0=$GET(^GMR(120.8,+$GET(GMRAPA),0))
IF GMRA0=""
QUIT 1
+3 ;Get observed/historical
SET TYPE=$PIECE(GMRA0,U,6)
+4 ;Type not entered
IF TYPE=""
QUIT 1
+5 ;Historical has no requirements
IF TYPE="h"
QUIT 0
+6 ;Missing obs date/time or sign/symptom or required comment
IF TYPE="o"
IF '$DATA(^GMR(120.85,"C",GMRAPA))!('$ORDER(^GMR(120.85,+$ORDER(^GMR(120.85,"C",GMRAPA,0)),2,0)))!('$$REQCOM)
QUIT 1
+7 QUIT 0
+8 ;
REQCOM() ;Function determines if comments required
+1 IF '$DATA(GMRASITE)
DO SITE^GMRAUTL
+2 ;Comments required?
IF +$PIECE(^GMRD(120.84,+GMRASITE,0),U,4)=0
QUIT 1
+3 IF $ORDER(^GMR(120.8,GMRAPA,26,0))
QUIT 1
+4 QUIT 0
+5 ;
GMRACHK(GMRAPA) ;
+1 ;Send a warning MailMan message if the VA DRUG CLASS field is empty.
+2 ;Get the first, if any,VA DRUG CLASS entries for this agent.
+3 NEW PATALLER,VADRCL1,PATNAME,REAC,REACTS,LINE
+4 NEW PATIEN,SSN,LAST4
+5 DO GETS^DIQ(120.8,GMRAPA_",","**","E","PATALLER")
+6 ;mod by CAS - to skip all but "D" Drug type reactions
+7 IF $PIECE($GET(^GMR(120.8,GMRAPA,0)),"^",20)'["D"
QUIT
+8 SET VADRCL1=$GET(PATALLER(120.803,"1,"_GMRAPA_",",.01,"E"))
+9 SET PATNAME=$GET(PATALLER(120.8,GMRAPA_",",.01,"E"))
+10 SET PATIEN=$$GET1^DIQ(120.8,GMRAPA,.01,"I")
+11 SET SSN=$$GET1^DIQ(2,PATIEN,.09,"E")
+12 SET LAST4=$EXTRACT(PATNAME,1,1)_$EXTRACT(SSN,6,9)
+13 IF '$GET(GMRAERR)
IF (VADRCL1="")
IF (PATNAME'="")
Begin DoDot:1
+14 KILL ^XTMP("GMRACHK",$JOB)
+15 SET LINE=1
+16 SET ^XTMP("GMRACHK",$JOB,LINE)="The following allergy/adverse reaction may need a VA DRUG CLASS added"
+17 SET LINE=LINE+1
+18 SET ^XTMP("GMRACHK",$JOB,LINE)="for the following Patient:"
+19 SET LINE=LINE+1
+20 SET ^XTMP("GMRACHK",$JOB,LINE)=""
+21 SET LINE=LINE+1
+22 SET ^XTMP("GMRACHK",$JOB,LINE)="Patient: "_PATNAME
+23 SET LINE=LINE+1
+24 SET ^XTMP("GMRACHK",$JOB,LINE)="LAST4: "_LAST4
+25 SET LINE=LINE+1
+26 SET ^XTMP("GMRACHK",$JOB,LINE)="Reactant: "_$GET(PATALLER(120.8,GMRAPA_",",.02,"E"))
+27 SET LINE=LINE+1
+28 ;Build a pretty string of reactions
+29 SET REAC=1
+30 SET REACTS=$GET(PATALLER(120.81,REAC_","_GMRAPA_",",.01,"E"))
+31 SET REAC=REAC+1
+32 FOR
if '$DATA(PATALLER(120.81,REAC_","_GMRAPA_",",.01,"E"))
QUIT
Begin DoDot:2
+33 SET REACTS=REACTS_", "_$GET(PATALLER(120.81,REAC_","_GMRAPA_",",.01,"E"))
+34 SET REAC=REAC+1
End DoDot:2
+35 SET ^XTMP("GMRACHK",$JOB,LINE)="Reactions: "_REACTS
+36 SET LINE=LINE+1
+37 SET ^XTMP("GMRACHK",$JOB,LINE)="OBS/HIS: "_$GET(PATALLER(120.8,GMRAPA_",",6,"E"))
+38 SET LINE=LINE+1
+39 SET ^XTMP("GMRACHK",$JOB,LINE)="Location: "_$$GET1^DIQ(405,$$GET1^DIQ(2,DFN,.102,"I"),.06,"E")
+40 SET LINE=LINE+1
+41 SET XMDUZ=DUZ
+42 SET XMTEXT="^XTMP(""GMRACHK"","_$JOB_","
+43 IF $GET(DUZ(2))=""
SET DUZ(2)=+$$STA^XUAF4($$KSP^XUPARAM("INST"))
+44 SET XMSUB="ALLERGY/ADVERSE REACTION WITHOUT VA DRUG CLASS ("
+45 SET XMSUB=XMSUB_$PIECE($$NS^XUAF4(DUZ(2)),U)_")"
+46 SET XMY("G.ADVERSE_ALLERGY_WARNING")=""
+47 DO ^XMD
+48 KILL ^XTMP("GMRACHK",$JOB)
End DoDot:1
+49 QUIT
+50 ;
MEDCHK ; NSR 20070203
+1 NEW GMRAMCHK
+2 WRITE !!,?2,"Checking new allergy against the patient's active medication profile . . . "
+3 DO CHKMEDS^ORWDAL32(.GMRAMCHK,$PIECE(GMRAPA(0),"^"),$PIECE(GMRAPA(0),"^",2))
+4 IF GMRAMCHK'>0
WRITE !!,?2,"No conflicts were discovered.",!
KILL GMRAMCHK
QUIT
+5 IF GMRAMCHK>0
Begin DoDot:1
+6 NEW GMRADA,GMRAYN,GMRAPROV,GMRASEND,GMRASLST,GMRALST,GMRAORD,GMRADUZ,GMRAOUT
+7 WRITE !!,?2,"The following Active Orders contain "_$PIECE(GMRAPA(0),"^",2)_":"
+8 SET GMRADA=""
+9 FOR
SET GMRADA=$ORDER(GMRAMCHK(GMRADA))
if GMRADA=""
QUIT
IF $DATA(GMRAMCHK(GMRADA))
Begin DoDot:2
+10 WRITE !!,$PIECE(GMRAMCHK(GMRADA),"^",3)_" (Order #"_$PIECE(GMRAMCHK(GMRADA),"^")_") An alert will be sent to:"
+11 DO GETPROV^ORWDAL32(.GMRAPROV,$PIECE(GMRAMCHK(GMRADA),"^"),+$GET(DFN))
+12 NEW PRVDA
SET PRVDA=""
+13 FOR
SET PRVDA=$ORDER(GMRAPROV(PRVDA))
if PRVDA=""
QUIT
IF $DATA(GMRAPROV(PRVDA))
Begin DoDot:3
+14 SET GMRASLST($PIECE(GMRAMCHK(GMRADA),"^"),$PIECE(GMRAPROV(PRVDA),";"))=GMRAPROV(PRVDA)
+15 WRITE !?3,$PIECE(GMRAPROV(PRVDA),"^",2)," - ",$PIECE(GMRAPROV(PRVDA),"^",3)
End DoDot:3
+16 KILL GMRAPROV
End DoDot:2
+17 WRITE !!
+18 SET (GMRAOUT,GMRAYN)=0
DO ASK^GMRAUTL("Do you wish to send the alert(s) to additional recipients? ",.GMRAOUT,.GMRAYN)
if GMRAOUT
QUIT
+19 IF GMRAYN
DO ADDSTHR(.GMRALST)
+20 IF $DATA(GMRASLST)
SET GMRAORD=""
FOR
SET GMRAORD=$ORDER(GMRASLST(GMRAORD))
if GMRAORD=""
QUIT
IF $DATA(GMRASLST(GMRAORD))
Begin DoDot:2
+21 KILL GMRAPROV
+22 SET GMRAPROV=""
+23 IF $DATA(GMRALST)
MERGE GMRAPROV=GMRALST
+24 DO SENDALRT^ORWDAL32(.GMRASEND,GMRAORD,.GMRAPROV)
End DoDot:2
+25 KILL GMRASEND,GMRASLST
End DoDot:1
+26 KILL GMRAMCHK
+27 QUIT
+28 ;
ADDSTHR(GMRALST) ; NSR 20070203
+1 KILL GMRALST
+2 NEW DIC,I,GMRAYN,GMRAON,GMRANOTE,GMRAOUT,Y
+3 SET GMRAYN=0
+4 ;NEW ALLERGY ENTERED/ACTIVE MED notification
SET GMRANOTE=88
+5 FOR I=1:1
Begin DoDot:1
+6 SET DIC="^VA(200,"
SET DIC(0)="AEBQ"
+7 SET DIC("A")="Enter Recipient's Name: "
DO ^DIC
+8 IF +Y>0
Begin DoDot:2
+9 SET GMRAON=$PIECE($$ONOFF^ORB3USER(GMRANOTE,+Y,"","",""),U,1)
+10 IF GMRAON="OFF"
WRITE !!," User is unable to receive the notification!",!
QUIT
+11 SET GMRALST($PIECE(Y,"^"))=$PIECE(Y,"^")_";VA(200,"_"^"_$PIECE(Y,"^",2)
KILL DIC,Y
End DoDot:2
+12 SET (GMRAOUT,GMRAYN)=0
DO ASK^GMRAUTL("Add another recipient? ",.GMRAOUT,.GMRAYN)
if GMRAOUT
QUIT
End DoDot:1
if 'GMRAYN
QUIT
+13 QUIT
+14 ;
XQOR ; GMRA EDIT VERIFIED DATA event driver ;P68
+1 NEW X
SET X=+$ORDER(^ORD(101,"B","GMRA EDIT VERIFIED DATA",0))_";ORD(101,"
+2 if 'X
QUIT
if '$GET(GMRAPA)
QUIT
+3 if '$DATA(GMRAPA(0))
SET GMRAPA(0)=$GET(^GMR(120.8,+GMRAPA,0))
+4 IF $DATA(GMRAPA1)
Begin DoDot:1
+5 if $GET(GMRAPA1)>0
SET GMRAPA1(0)=$GET(^GMR(120.85,+GMRAPA1,0))
+6 ; cleanup GMRAPA1 if no selection (carried over from last edit)
+7 IF $GET(GMRAPA1)<0!($PIECE(GMRAPA1(0),U,15)'=GMRAPA)
KILL GMRAPA1
End DoDot:1
+8 if X
DO EN^XQOR
+9 QUIT