Index: WorldVistAEHR/trunk/r/ORDER_ENTRY_RESULTS_REPORTING-OR-OCX--ORRC--ORRJ/ORWORB.m
===================================================================
--- WorldVistAEHR/trunk/r/ORDER_ENTRY_RESULTS_REPORTING-OR-OCX--ORRC--ORRJ/ORWORB.m	(revision 613)
+++ WorldVistAEHR/trunk/r/ORDER_ENTRY_RESULTS_REPORTING-OR-OCX--ORRC--ORRJ/ORWORB.m	(revision 623)
@@ -1,201 +1,201 @@
-ORWORB	; slc/dee/REV/CLA - RPC functions which return user alert ;10:12 am JAN 31, 2001
-	;;3.0;ORDER ENTRY/RESULTS REPORTING;**10,85,116,148,173,190,215,243**;Dec 17, 1997;Build 242
-	;
-URGENLST(ORY)	;return array of the  urgency for the notification
-	N ORSRV,ORERROR
-	S ORSRV=$G(^VA(200,DUZ,5)) I +ORSRV>0 S ORSRV=$P(ORSRV,U)
-	D GETLST^XPAR(.ORY,"USR^SRV.`"_$G(ORSRV)_"^DIV^SYS^PKG","ORB URGENCY","I",.ORERROR)
-	Q
-	;
-FASTUSER(ORY)	;return current user's notifications across all patients
-	N STRTDATE,STOPDATE,ORTOT,I,ORURG,URG,ORN,SORT,ORN0,URGLIST,REMLIST,REM,NONORLST,NONOR
-	N ALRT,ALRTDT,ALRTPT,ALRTMSG,ALRTI,ALRTLOC,ALRTXQA,J,FWDBY,PRE,ALRTDFN
-	K ^TMP("ORBG",$J)
-	S STRTDATE="",STOPDATE="",FWDBY="Forwarded by: "
-	D GETUSER1^XQALDATA("^TMP(""ORB"",$J)",DUZ,STRTDATE,STOPDATE)
-	S ORTOT=^TMP("ORB",$J)
-	D URGLIST^ORQORB(.URGLIST)
-	D REMLIST^ORQORB(.REMLIST)
-	D REMNONOR^ORQORB(.NONORLST)
-	S J=0
-	F I=1:1:ORTOT D
-	.S ALRTDFN=""
-	.S ALRT=^TMP("ORB",$J,I)
-	.S PRE=$E(ALRT,1,1)
-	.S ALRTXQA=$P(ALRT,U,2)  ;XQAID
-	.S NONOR="" F  S NONOR=$O(NONORLST(NONOR)) Q:NONOR=""  D
-	..I ALRTXQA[NONOR S REM=1  ;allow this type of alert to be Removed
-	.S ALRTMSG=$P($P(ALRT,U),PRE_"  ",2)
-	.I $E(ALRT,4,8)'="-----" D  ;not forwarded alert info/comment
-	..S ORURG="n/a"
-	..S ALRTI=$P(ALRT,"  ")
-	..S ALRTPT=""
-	..S ALRTLOC=""
-	..I $E($P(ALRTXQA,";"),1,3)="TIU" S ORURG="Moderate"
-	..I $P(ALRTXQA,",")="OR" D
-	...S ORN=$P($P(ALRTXQA,";"),",",3)
-	...S URG=$G(URGLIST(ORN))
-	...S ORURG=$S(URG=1:"HIGH",URG=2:"Moderate",1:"low")
-	...S REM=$G(REMLIST(ORN))
-	...S ORN0=^ORD(100.9,ORN,0)
-	...S ALRTI=$S($P(ORN0,U,6)="INFODEL":"I",1:"")
-	...S ALRTDFN=$P(ALRTXQA,",",2)
-	...S ALRTLOC=$G(^DPT(+$G(ALRTDFN),.1))
-	..S ALRTI=$S(ALRTI="I":"I",1:"")
-	..I ALRT["): " D
-	...S ALRTPT=$P(ALRT,": ")
-	...S ALRTPT=$E(ALRTPT,4,$L(ALRTPT))
-	...S ALRTMSG=$P($P(ALRT,U),"): ",2)
-	...I $E(ALRTMSG,1,1)="[" D
-	....S:'$L(ALRTLOC) ALRTLOC=$P($P(ALRTMSG,"]"),"[",2)
-	....S ALRTMSG=$P(ALRTMSG,"] ",2)
-	..I '$L($G(ALRTPT)) S ALRTPT="no patient"
-	..S ALRTDT=$P(ALRTXQA,";",3)
-	..S ALRTDT=$P(ALRTDT,".")_"."_$E($P(ALRTDT,".",2)_"0000",1,4)
-	..S ALRTDT=$E(ALRTDT,4,5)_"/"_$E(ALRTDT,6,7)_"/"_($E(ALRTDT,1,3)+1700)_"@"_$E($P(ALRTDT,".",2),1,2)_":"_$E($P(ALRTDT,".",2),3,4)
-	..;S ALRTDT=($E(ALRTDT,1,3)+1700)_"/"_$E(ALRTDT,4,5)_"/"_$E(ALRTDT,6,7)_"@"_$E($P(ALRTDT,".",2),1,2)_":"_$E($P(ALRTDT,".",2),3,4)
-	..S J=J+1,^TMP("ORBG",$J,J)=ALRTI_U_ALRTPT_U_ALRTLOC_U_ORURG_U_ALRTDT_U
-	..S ^TMP("ORBG",$J,J)=^TMP("ORBG",$J,J)_ALRTMSG_U_U_ALRTXQA_U_$G(REM)_U
-	.;
-	.;if alert forward info/comment:
-	.I $E(ALRTMSG,1,5)="-----" D
-	..S ALRTMSG=$P(ALRTMSG,"-----",2)
-	..I $E(ALRTMSG,1,14)=FWDBY D
-	...S J=J+1,^TMP("ORBG",$J,J)=FWDBY_U_$P($P(ALRTMSG,FWDBY,2),"Generated: ")_$P($P(ALRTMSG,FWDBY,2),"Generated: ",2)
-	..E  S ^TMP("ORBG",$J,J)=^TMP("ORBG",$J,J)_U_""""_ALRTMSG_""""
-	S ^TMP("ORBG",$J)=""
-	S ORY=$NA(^TMP("ORBG",$J))
-	Q
-	;
-GETDATA(ORY,XQAID)	; return XQADATA for an alert
-	N SHOWADD
-	S ORY=""
-	Q:$G(XQAID)=""!('$D(^XTV(8992,"AXQA",XQAID)))
-	D GETACT^XQALERT(XQAID)
-	S ORY=XQADATA
-	I ($E(XQAID,1,3)="TIU"),(+ORY>0) D
-	. S SHOWADD=1
-	. S ORY=ORY_$$RESOLVE^TIUSRVLO(+ORY)
-	K XQAID,XQADATA,XQAOPT,XQAROU
-	Q
-	;
-KILUNSNO(Y,ORVP)	; Delete unsigned order alerts if no unsigned orders remaining
-	S ORVP=ORVP_";DPT("
-	D UNOTIF^ORCSIGN
-	Q
-	;
-UNFLORD(ORY,DFN,XQAID)	; -- auto-unflag orders?/delete alert
-	Q:'$L(DFN)!('$L(XQAID))
-	N ORI,ORIFN,ORA,XQAKILL,ORN,ORBY,ORAUTO,ORUNF
-	S ORN=+$O(^ORD(100.9,"B","FLAGGED ORDERS",0))
-	S XQAKILL=$$XQAKILL^ORB3F1(ORN)
-	D LIST^ORQOR1(.ORBY,DFN,"ALL",12,"","")
-	S ORAUTO=+$$GET^XPAR("ALL","ORPF AUTO UNFLAG")
-	S ORI=0 F  S ORI=$O(ORBY(ORI)) Q:ORI'>0  D
-	. I ORAUTO D  ; unflag
-	. . S ORUNF=+$E($$NOW^XLFDT,1,12)_U_DUZ_"^Auto-Unflagged"
-	. . S ORIFN=$P(ORBY(ORI),U),ORA=+$P(ORIFN,";",2)
-	. . I ORIFN,$D(^OR(100,+ORIFN,0)) S $P(^(8,ORA,3),U)=0,$P(^(3),U,6,8)=ORUNF D MSG^ORCFLAG(ORIFN) ; unflag
-	I ORAUTO!(+$G(ORBY(1))=0) D DELETE^XQALERT
-	Q
-KILEXMED(Y,ORDFN)	 ; -- Delete expiring meds notification if no expiring meds remaining
-	N ORDG,ORLST S ORDG=$$DG^ORQOR1("RX")
-	D AGET^ORWORR(.ORLST,ORDFN,5,ORDG)
-	Q:+(@ORLST@(.1))  ;more left
-	N XQAKILL,ORNIFN,ORVP,ORIO S OROI=""
-	F OROI="INPT","OUTPT" D
-	.S ORNIFN=$O(^ORD(100.9,"B","MEDICATIONS EXPIRING - "_OROI,0)),ORVP=ORDFN_";DPT("
-	.Q:'$L($G(ORNIFN))
-	.S XQAKILL=$$XQAKILL^ORB3F1(ORNIFN) ; expiring meds notif
-	.I $D(XQAID) D DELETE^XQALERT
-	.I '$D(XQAID) S XQAID=$P($G(^ORD(100.9,ORNIFN,0)),U,2)_","_+ORVP_","_ORNIFN D DELETEA^XQALERT K XQAID
-	Q
-KILEXOI(Y,ORDFN,ORNIFN)	 ; -- Delete expiring flagged OI notification if no flagged expiring OI remaining
-	N ORDG,ORLST S ORDG=$$DG^ORQOR1("ALL")
-	D AGET^ORWORR(.ORLST,ORDFN,5,ORDG)
-	Q:+(@ORLST@(.1))  ;more left
-	N XQAKILL,ORVP
-	S ORVP=ORDFN_";DPT("
-	S XQAKILL=$$XQAKILL^ORB3F1(ORNIFN) ; flagged expiring OI notifications
-	I $D(XQAID) D DELETE^XQALERT
-	I '$D(XQAID) S XQAID=$P($G(^ORD(100.9,ORNIFN,0)),U,2)_","_+ORVP_","_ORNIFN D DELETEA^XQALERT K XQAID
-	Q
-KILUNVOR(Y,ORDFN)	 ; -- Delete UNVERIFIED ORDER notification if none remaining within current admission/30 days
-	N DFN,ORDG,ORLST,ORBDT,OREDT,ORDDT S ORDG=$$DG^ORQOR1("ALL")
-	S OREDT=$$NOW^XLFDT
-	S ORDDT=$$FMADD^XLFDT(OREDT,"-90")
-	;get current admission date/time:
-	S DFN=ORDFN,VA200="" D INP^VADPT
-	S ORBDT=$P($G(VAIN(7)),U)
-	S ORBDT=$S('$L($G(ORBDT)):$$FMADD^XLFDT(OREDT,"-30"),1:ORBDT)  ;<= if no admission use past 30 days
-	S ORBDT=$S(ORDDT>ORBDT:ORDDT,1:ORBDT)  ;max past days to use is 90 days
-	D AGET^ORWORR(.ORLST,ORDFN,9,ORDG,ORBDT,OREDT)
-	Q:+(@ORLST@(.1))  ;more left
-	N XQAKILL,ORVP,ORNIFN
-	S ORNIFN=$O(^ORD(100.9,"B","UNVERIFIED ORDER",0)),ORVP=ORDFN_";DPT("
-	S XQAKILL=$$XQAKILL^ORB3F1(ORNIFN)
-	I $D(XQAID) D DELETE^XQALERT
-	I '$D(XQAID) S XQAID=$P($G(^ORD(100.9,ORNIFN,0)),U,2)_","_+ORVP_","_ORNIFN D DELETEA^XQALERT K XQAID
-	Q
-KILUNVMD(Y,ORDFN)	 ; -- Delete UNVERIFIED MEDS notification if none remaining within current admission/30 days
-	N DFN,ORDG,ORLST,ORBDT,OREDT,ORDDT S ORDG=$$DG^ORQOR1("RX")
-	S OREDT=$$NOW^XLFDT
-	S ORDDT=$$FMADD^XLFDT(OREDT,"-90")
-	;get current admission date/time:
-	S DFN=ORDFN,VA200="" D INP^VADPT
-	S ORBDT=$P($G(VAIN(7)),U)
-	S ORBDT=$S('$L($G(ORBDT)):$$FMADD^XLFDT(OREDT,"-30"),1:ORBDT)  ;<= if no admission use past 30 days
-	S ORBDT=$S(ORDDT>ORBDT:ORDDT,1:ORBDT)  ;max past days to use is 90 days
-	D AGET^ORWORR(.ORLST,ORDFN,9,ORDG,ORBDT,OREDT)
-	Q:+(@ORLST@(.1))  ;more left
-	N XQAKILL,ORVP,ORNIFN
-	S ORNIFN=$O(^ORD(100.9,"B","UNVERIFIED MEDICATION ORDER",0)),ORVP=ORDFN_";DPT("
-	S XQAKILL=$$XQAKILL^ORB3F1(ORNIFN)
-	I $D(XQAID) D DELETE^XQALERT
-	I '$D(XQAID) S XQAID=$P($G(^ORD(100.9,ORNIFN,0)),U,2)_","_+ORVP_","_ORNIFN D DELETEA^XQALERT K XQAID
-	Q
-ESORD(ORY,XQAID)	  ;order(s) requiring electronic signature follow-up
-	K XQAKILL
-	N ORPT,ORDG,ORBXQAID,ORY,ORX,ORZ,ORDERS,ORDNUM,ORQUIT,ORBLMDEL
-	S ORBXQAID=XQAID,ORDERS=0,ORQUIT=0
-	S ORPT=$P($P(XQAID,";"),",",2)  ;get pt dfn from xqaid
-	S ORDG=$$DG^ORQOR1("ALL")
-	;the FLG code for UNSIGNED orders in ORQ1 is '11'
-	;get unsigned orders - if none exist, delete alert then quit:
-	D EN^ORQ1(ORPT_";DPT(",ORDG,11,"","","",0,0)
-	S ORX="",ORX=$O(^TMP("ORR",$J,ORX)) Q:ORX=""  I +$G(^TMP("ORR",$J,ORX,"TOT"))<1 D DEL^ORB3FUP1(.ORY,ORBXQAID) K ^TMP("ORR",$J) Q
-	;
-	;user does not have ORES key, delete user's alert:
-	I '$D(^XUSEC("ORES",DUZ)) S XQAKILL=1 D DEL^ORB3FUP1(.ORY,ORBXQAID) K ^TMP("ORR",$J) Q
-	;
-	;if prov is NOT linked to pt via attending, primary or teams:
-	I $$PPLINK^ORQPTQ1(DUZ,ORPT)=0 D
-	.S ORX="" F  S ORX=$O(^TMP("ORR",$J,ORX)) Q:ORX=""!(ORDERS=1)  D
-	..S ORZ="" F  S ORZ=$O(^TMP("ORR",$J,ORX,ORZ)) Q:+ORZ=0!(ORDERS=1)  D
-	...S ORDNUM=^TMP("ORR",$J,ORX,ORZ)
-	...;quit if this unsigned order's last action was made by the user
-	...I DUZ=+$$UNSIGNOR^ORQOR2(ORDNUM) S ORDERS=1
-	.I ORDERS'=1 D  ;provider has no outstanding unsigned orders for pt
-	..S XQAKILL=1 D DEL^ORB3FUP1(.ORY,ORBXQAID)  ;delete alert for this user
-	K ^TMP("ORR",$J)
-	Q
-	;
-TXTFUP(ROOT,DFN,NOTIF,XQADATA)	; Follow-up for text messages
-	;
-	I NOTIF=67 D CHGRAD
-	Q
-	;
-CHGRAD	;GUI follow-up for Imaging Request Changed (#67)
-	S ROOT=$NA(^TMP($J,"RAE4"))
-	K @ROOT
-	D SET1^RAO7PC4  ;DBIA #3563
-	Q
-	;
-GETSORT(ORY)	;return notification sort method^direction for user/division/system/pkg
-	S ORY=$$GET^XPAR("ALL","ORB SORT METHOD",1,"I")_U_$$GET^XPAR("ALL","ORB SORT DIRECTION",1,"I")
-	Q
-	;
-SETSORT(ORERR,SORT,DIR)	;set notification sort method^direction for user
-	D EN^XPAR(DUZ_";VA(200,","ORB SORT METHOD",1,SORT,.ORERR)
-	I $L($G(DIR)) D EN^XPAR(DUZ_";VA(200,","ORB SORT DIRECTION",1,DIR,.ORERR)
-	Q
+ORWORB ; slc/dee/REV/CLA - RPC functions which return user alert ;10:12 am JAN 31, 2001
+ ;;3.0;ORDER ENTRY/RESULTS REPORTING;**10,85,116,148,173,190,215**;Dec 17, 1997
+ ;
+URGENLST(ORY) ;return array of the  urgency for the notification
+ N ORSRV,ORERROR
+ S ORSRV=$G(^VA(200,DUZ,5)) I +ORSRV>0 S ORSRV=$P(ORSRV,U)
+ D GETLST^XPAR(.ORY,"USR^SRV.`"_$G(ORSRV)_"^DIV^SYS^PKG","ORB URGENCY","I",.ORERROR)
+ Q
+ ;
+FASTUSER(ORY) ;return current user's notifications across all patients
+ N STRTDATE,STOPDATE,ORTOT,I,ORURG,URG,ORN,SORT,ORN0,URGLIST,REMLIST,REM,NONORLST,NONOR
+ N ALRT,ALRTDT,ALRTPT,ALRTMSG,ALRTI,ALRTLOC,ALRTXQA,J,FWDBY,PRE,ALRTDFN
+ K ^TMP("ORBG",$J)
+ S STRTDATE="",STOPDATE="",FWDBY="Forwarded by: "
+ D GETUSER1^XQALDATA("^TMP(""ORB"",$J)",DUZ,STRTDATE,STOPDATE)
+ S ORTOT=^TMP("ORB",$J)
+ D URGLIST^ORQORB(.URGLIST)
+ D REMLIST^ORQORB(.REMLIST)
+ D REMNONOR^ORQORB(.NONORLST)
+ S J=0
+ F I=1:1:ORTOT D
+ .S ALRTDFN=""
+ .S ALRT=^TMP("ORB",$J,I)
+ .S PRE=$E(ALRT,1,1)
+ .S ALRTXQA=$P(ALRT,U,2)  ;XQAID
+ .S NONOR="" F  S NONOR=$O(NONORLST(NONOR)) Q:NONOR=""  D
+ ..I ALRTXQA[NONOR S REM=1  ;allow this type of alert to be Removed
+ .S ALRTMSG=$P($P(ALRT,U),PRE_"  ",2)
+ .I $E(ALRT,4,8)'="-----" D  ;not forwarded alert info/comment
+ ..S ORURG="n/a"
+ ..S ALRTI=$P(ALRT,"  ")
+ ..S ALRTPT=""
+ ..S ALRTLOC=""
+ ..I $E($P(ALRTXQA,";"),1,3)="TIU" S ORURG="Moderate"
+ ..I $P(ALRTXQA,",")="OR" D
+ ...S ORN=$P($P(ALRTXQA,";"),",",3)
+ ...S URG=$G(URGLIST(ORN))
+ ...S ORURG=$S(URG=1:"HIGH",URG=2:"Moderate",1:"low")
+ ...S REM=$G(REMLIST(ORN))
+ ...S ORN0=^ORD(100.9,ORN,0)
+ ...S ALRTI=$S($P(ORN0,U,6)="INFODEL":"I",1:"")
+ ...S ALRTDFN=$P(ALRTXQA,",",2)
+ ...S ALRTLOC=$G(^DPT(+$G(ALRTDFN),.1))
+ ..S ALRTI=$S(ALRTI="I":"I",1:"")
+ ..I ALRT["): " D
+ ...S ALRTPT=$P(ALRT,": ")
+ ...S ALRTPT=$E(ALRTPT,4,$L(ALRTPT))
+ ...S ALRTMSG=$P($P(ALRT,U),"): ",2)
+ ...I $E(ALRTMSG,1,1)="[" D
+ ....S:'$L(ALRTLOC) ALRTLOC=$P($P(ALRTMSG,"]"),"[",2)
+ ....S ALRTMSG=$P(ALRTMSG,"] ",2)
+ ..I '$L($G(ALRTPT)) S ALRTPT="no patient"
+ ..S ALRTDT=$P(ALRTXQA,";",3)
+ ..S ALRTDT=$P(ALRTDT,".")_"."_$E($P(ALRTDT,".",2)_"0000",1,4)
+ ..S ALRTDT=$E(ALRTDT,4,5)_"/"_$E(ALRTDT,6,7)_"/"_($E(ALRTDT,1,3)+1700)_"@"_$E($P(ALRTDT,".",2),1,2)_":"_$E($P(ALRTDT,".",2),3,4)
+ ..;S ALRTDT=($E(ALRTDT,1,3)+1700)_"/"_$E(ALRTDT,4,5)_"/"_$E(ALRTDT,6,7)_"@"_$E($P(ALRTDT,".",2),1,2)_":"_$E($P(ALRTDT,".",2),3,4)
+ ..S J=J+1,^TMP("ORBG",$J,J)=ALRTI_U_ALRTPT_U_ALRTLOC_U_ORURG_U_ALRTDT_U
+ ..S ^TMP("ORBG",$J,J)=^TMP("ORBG",$J,J)_ALRTMSG_U_U_ALRTXQA_U_$G(REM)_U
+ .;
+ .;if alert forward info/comment:
+ .I $E(ALRTMSG,1,5)="-----" D
+ ..S ALRTMSG=$P(ALRTMSG,"-----",2)
+ ..I $E(ALRTMSG,1,14)=FWDBY D
+ ...S J=J+1,^TMP("ORBG",$J,J)=FWDBY_U_$P($P(ALRTMSG,FWDBY,2),"Generated: ")_$P($P(ALRTMSG,FWDBY,2),"Generated: ",2)
+ ..E  S ^TMP("ORBG",$J,J)=^TMP("ORBG",$J,J)_U_""""_ALRTMSG_""""
+ S ^TMP("ORBG",$J)=""
+ S ORY=$NA(^TMP("ORBG",$J))
+ Q
+ ;
+GETDATA(ORY,XQAID) ; return XQADATA for an alert
+ N SHOWADD
+ S ORY=""
+ Q:$G(XQAID)=""!('$D(^XTV(8992,"AXQA",XQAID)))
+ D GETACT^XQALERT(XQAID)
+ S ORY=XQADATA
+ I ($E(XQAID,1,3)="TIU"),(+ORY>0) D
+ . S SHOWADD=1
+ . S ORY=ORY_$$RESOLVE^TIUSRVLO(+ORY)
+ K XQAID,XQADATA,XQAOPT,XQAROU
+ Q
+ ;
+KILUNSNO(Y,ORVP) ; Delete unsigned order alerts if no unsigned orders remaining
+ S ORVP=ORVP_";DPT("
+ D UNOTIF^ORCSIGN
+ Q
+ ;
+UNFLORD(Y,DFN,XQAID) ; -- auto-unflag orders?/delete alert
+ Q:'$L(DFN)!('$L(XQAID))
+ N ORI,ORIFN,ORA,XQAKILL,ORN,ORBY,ORAUTO,ORUNF
+ S ORN=+$O(^ORD(100.9,"B","FLAGGED ORDERS",0))
+ S XQAKILL=$$XQAKILL^ORB3F1(ORN)
+ D LIST^ORQOR1(.ORBY,DFN,"ALL",12,"","")
+ S ORAUTO=+$$GET^XPAR("ALL","ORPF AUTO UNFLAG")
+ S ORI=0 F  S ORI=$O(ORBY(ORI)) Q:ORI'>0  D
+ . I ORAUTO D  ; unflag
+ . . S ORUNF=+$E($$NOW^XLFDT,1,12)_U_DUZ_"^Auto-Unflagged"
+ . . S ORIFN=$P(ORBY(ORI),U),ORA=+$P(ORIFN,";",2)
+ . . I ORIFN,$D(^OR(100,+ORIFN,0)) S $P(^(8,ORA,3),U)=0,$P(^(3),U,6,8)=ORUNF ; unflag
+ I ORAUTO!(+$G(ORBY(1))=0) D DELETE^XQALERT
+ Q
+KILEXMED(Y,ORDFN)  ; -- Delete expiring meds notification if no expiring meds remaining
+ N ORDG,ORLST S ORDG=$$DG^ORQOR1("RX")
+ D AGET^ORWORR(.ORLST,ORDFN,5,ORDG)
+ Q:+(@ORLST@(.1))  ;more left
+ N XQAKILL,ORNIFN,ORVP,ORIO S OROI=""
+ F OROI="INPT","OUTPT" D
+ .S ORNIFN=$O(^ORD(100.9,"B","MEDICATIONS EXPIRING - "_OROI,0)),ORVP=ORDFN_";DPT("
+ .Q:'$L($G(ORNIFN))
+ .S XQAKILL=$$XQAKILL^ORB3F1(ORNIFN) ; expiring meds notif
+ .I $D(XQAID) D DELETE^XQALERT
+ .I '$D(XQAID) S XQAID=$P($G(^ORD(100.9,ORNIFN,0)),U,2)_","_+ORVP_","_ORNIFN D DELETEA^XQALERT K XQAID
+ Q
+KILEXOI(Y,ORDFN,ORNIFN)  ; -- Delete expiring flagged OI notification if no flagged expiring OI remaining
+ N ORDG,ORLST S ORDG=$$DG^ORQOR1("ALL")
+ D AGET^ORWORR(.ORLST,ORDFN,5,ORDG)
+ Q:+(@ORLST@(.1))  ;more left
+ N XQAKILL,ORVP
+ S ORVP=ORDFN_";DPT("
+ S XQAKILL=$$XQAKILL^ORB3F1(ORNIFN) ; flagged expiring OI notifications
+ I $D(XQAID) D DELETE^XQALERT
+ I '$D(XQAID) S XQAID=$P($G(^ORD(100.9,ORNIFN,0)),U,2)_","_+ORVP_","_ORNIFN D DELETEA^XQALERT K XQAID
+ Q
+KILUNVOR(Y,ORDFN)  ; -- Delete UNVERIFIED ORDER notification if none remaining within current admission/30 days
+ N DFN,ORDG,ORLST,ORBDT,OREDT,ORDDT S ORDG=$$DG^ORQOR1("ALL")
+ S OREDT=$$NOW^XLFDT
+ S ORDDT=$$FMADD^XLFDT(OREDT,"-90")
+ ;get current admission date/time:
+ S DFN=ORDFN,VA200="" D INP^VADPT
+ S ORBDT=$P($G(VAIN(7)),U)
+ S ORBDT=$S('$L($G(ORBDT)):$$FMADD^XLFDT(OREDT,"-30"),1:ORBDT)  ;<= if no admission use past 30 days
+ S ORBDT=$S(ORDDT>ORBDT:ORDDT,1:ORBDT)  ;max past days to use is 90 days
+ D AGET^ORWORR(.ORLST,ORDFN,9,ORDG,ORBDT,OREDT)
+ Q:+(@ORLST@(.1))  ;more left
+ N XQAKILL,ORVP,ORNIFN
+ S ORNIFN=$O(^ORD(100.9,"B","UNVERIFIED ORDER",0)),ORVP=ORDFN_";DPT("
+ S XQAKILL=$$XQAKILL^ORB3F1(ORNIFN)
+ I $D(XQAID) D DELETE^XQALERT
+ I '$D(XQAID) S XQAID=$P($G(^ORD(100.9,ORNIFN,0)),U,2)_","_+ORVP_","_ORNIFN D DELETEA^XQALERT K XQAID
+ Q
+KILUNVMD(Y,ORDFN)  ; -- Delete UNVERIFIED MEDS notification if none remaining within current admission/30 days
+ N DFN,ORDG,ORLST,ORBDT,OREDT,ORDDT S ORDG=$$DG^ORQOR1("RX")
+ S OREDT=$$NOW^XLFDT
+ S ORDDT=$$FMADD^XLFDT(OREDT,"-90")
+ ;get current admission date/time:
+ S DFN=ORDFN,VA200="" D INP^VADPT
+ S ORBDT=$P($G(VAIN(7)),U)
+ S ORBDT=$S('$L($G(ORBDT)):$$FMADD^XLFDT(OREDT,"-30"),1:ORBDT)  ;<= if no admission use past 30 days
+ S ORBDT=$S(ORDDT>ORBDT:ORDDT,1:ORBDT)  ;max past days to use is 90 days
+ D AGET^ORWORR(.ORLST,ORDFN,9,ORDG,ORBDT,OREDT)
+ Q:+(@ORLST@(.1))  ;more left
+ N XQAKILL,ORVP,ORNIFN
+ S ORNIFN=$O(^ORD(100.9,"B","UNVERIFIED MEDICATION ORDER",0)),ORVP=ORDFN_";DPT("
+ S XQAKILL=$$XQAKILL^ORB3F1(ORNIFN)
+ I $D(XQAID) D DELETE^XQALERT
+ I '$D(XQAID) S XQAID=$P($G(^ORD(100.9,ORNIFN,0)),U,2)_","_+ORVP_","_ORNIFN D DELETEA^XQALERT K XQAID
+ Q
+ESORD(ORY,XQAID)   ;order(s) requiring electronic signature follow-up
+ K XQAKILL
+ N ORPT,ORDG,ORBXQAID,ORY,ORX,ORZ,ORDERS,ORDNUM,ORQUIT,ORBLMDEL
+ S ORBXQAID=XQAID,ORDERS=0,ORQUIT=0
+ S ORPT=$P($P(XQAID,";"),",",2)  ;get pt dfn from xqaid
+ S ORDG=$$DG^ORQOR1("ALL")
+ ;the FLG code for UNSIGNED orders in ORQ1 is '11'
+ ;get unsigned orders - if none exist, delete alert then quit:
+ D EN^ORQ1(ORPT_";DPT(",ORDG,11,"","","",0,0)
+ S ORX="",ORX=$O(^TMP("ORR",$J,ORX)) Q:ORX=""  I +$G(^TMP("ORR",$J,ORX,"TOT"))<1 D DEL^ORB3FUP1(.ORY,ORBXQAID) K ^TMP("ORR",$J) Q
+ ;
+ ;user does not have ORES key, delete user's alert:
+ I '$D(^XUSEC("ORES",DUZ)) S XQAKILL=1 D DEL^ORB3FUP1(.ORY,ORBXQAID) K ^TMP("ORR",$J) Q
+ ;
+ ;if prov is NOT linked to pt via attending, primary or teams:
+ I $$PPLINK^ORQPTQ1(DUZ,ORPT)=0 D
+ .S ORX="" F  S ORX=$O(^TMP("ORR",$J,ORX)) Q:ORX=""!(ORDERS=1)  D
+ ..S ORZ="" F  S ORZ=$O(^TMP("ORR",$J,ORX,ORZ)) Q:+ORZ=0!(ORDERS=1)  D
+ ...S ORDNUM=^TMP("ORR",$J,ORX,ORZ)
+ ...;quit if this unsigned order's last action was made by the user
+ ...I DUZ=+$$UNSIGNOR^ORQOR2(ORDNUM) S ORDERS=1
+ .I ORDERS'=1 D  ;provider has no outstanding unsigned orders for pt
+ ..S XQAKILL=1 D DEL^ORB3FUP1(.ORY,ORBXQAID)  ;delete alert for this user
+ K ^TMP("ORR",$J)
+ Q
+ ;
+TXTFUP(ROOT,DFN,NOTIF,XQADATA) ; Follow-up for text messages
+ ;
+ I NOTIF=67 D CHGRAD
+ Q
+ ;
+CHGRAD ;GUI follow-up for Imaging Request Changed (#67)
+ S ROOT=$NA(^TMP($J,"RAE4"))
+ K @ROOT
+ D SET1^RAO7PC4  ;DBIA #3563
+ Q
+ ;
+GETSORT(ORY) ;return notification sort method^direction for user/division/system/pkg
+ S ORY=$$GET^XPAR("ALL","ORB SORT METHOD",1,"I")_U_$$GET^XPAR("ALL","ORB SORT DIRECTION",1,"I")
+ Q
+ ;
+SETSORT(ORERR,SORT,DIR) ;set notification sort method^direction for user
+ D EN^XPAR(DUZ_";VA(200,","ORB SORT METHOD",1,SORT,.ORERR)
+ I $L($G(DIR)) D EN^XPAR(DUZ_";VA(200,","ORB SORT DIRECTION",1,DIR,.ORERR)
+ Q
