Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: YTQRQAD6

YTQRQAD6.m

Go to the documentation of this file.
  1. YTQRQAD6 ;SLC/LLB - Determine High Risk Flagging ; 07/15/2020
  1. ;;5.01;MENTAL HEALTH;**158,181,187,204,240**;Dec 30, 1994;Build 10
  1. ;
  1. ; The assumption is made that variable DFN will exist prior to calling this routine.
  1. ;
  1. FLAG(DFN,INST,HRR,PR) ; ROUTINE to calculate Positive response and High Risk flagging
  1. ; ICR #4290 READ OF CLINICAL REMINDER INDEX (PXRMINDX)
  1. ; DFN: IEN to Patient file (#2)
  1. ; INST: Instrument name in MH TESTS AND SURVEYS file (#601.71)
  1. ; INSTIEN: IEN to instrument in MH TESTS AND SURVEYS file (#601.71)
  1. ; HRR: High Risk Requirement
  1. ; # score greater than #
  1. ; A# any question with a score >#
  1. ; I9 Positive I9 question
  1. ; Y1,2,3,n. Comma delimited list of question numbers. A yes to any is HR
  1. ; YA Yes to any question
  1. ; G3^0,5^1,q^n. Comma delimited list of question#^Value for question response Greater Than Value
  1. ; T#p Can be added to any HRR parameter where # is a positive integer and
  1. ; p is the time period M months, W weeks, D day. This will be treated as
  1. ; the most recent administration of the instrument but only if the
  1. ; Ex: "Y,1,2,3,T6M" indicates Yes to Q 1,2, or 3 within the last 6
  1. ; months.
  1. ; Ex: "Y,1,2,3,T6M-I9" is the same as the previous example except that
  1. ; a positive I9, without regard to time frame, triggers High Risk.
  1. ; HRR parameters can be combined by adding "-" between them indicating an "or"
  1. ; such as "Y,3,4,5,8-I9"
  1. ; PR: Positive Response threshold, Score greater than number passed in PR.
  1. ; Based solely on total score. Ex: 8 indicating any score greater than 8.
  1. ; YSFLAG: Will be 0 for no risk
  1. ; 1 for Positive Response
  1. ; 2 for High Risk
  1. ; 3 for Both Positive response & High Risk
  1. ; The field SUICIDE RISK (#16) in the MH ADMINISTRATION file (#601.84) will be
  1. ; populated with the result.
  1. N DATE,ADMID,YSFLAG,YS,SI,MULT,INSTIEN,YSLIM,YSCORE
  1. S SI=0
  1. I 'DFN D SETERROR^YTQRUTL(404,"Not Found: No patient passed. Cannot continue.") Q
  1. I INST="" D SETERROR^YTQRUTL(404,"Not Found: No instrument passed. Cannot continue.") Q
  1. S YSFLAG=0
  1. S INSTIEN=$O(^YTT(601.71,"B",INST,0)) Q:'$D(^PXRMINDX(601.84,"PI",DFN,INSTIEN))
  1. S DATE=""
  1. ; Get date of administration most recent to oldest
  1. F S DATE=$O(^PXRMINDX(601.84,"PI",DFN,INSTIEN,DATE),-1) Q:DATE="" D FLAG2
  1. Q
  1. ;
  1. FLAG2 ;
  1. N X,YSHRT,CURFLG,AGE
  1. S ADMID=$O(^PXRMINDX(601.84,"PI",DFN,INSTIEN,DATE,"")) ;IEN to file 601.84
  1. ; NOTE: The ARC index is only updated for completed administrations.
  1. ; A separate check for Administration COMPLETE is not necessary
  1. S CURFLG=$P(^YTT(601.84,ADMID,0),U,14)
  1. I CURFLG=0!(CURFLG=9) Q ;Flag already set to 'none' or 'expired'
  1. ;Any PR/HR flag older than 90 days should be set to 'expired'
  1. I $$FMDIFF^XLFDT($$HTFM^XLFDT($H),DATE)>90 D Q
  1. . S YSFLAG=9 D SETFLAG
  1. I $P(^YTT(601.84,ADMID,0),U,14)'="" Q ; Flag already set don't recalculate
  1. D QUEST(ADMID,INST) ; Retrieve questions and patient answers and set them into ^TMP("YSQA",$J,INST,CNT)
  1. D SCORES ; Get scores for assessment
  1. S YSFLAG=0
  1. I PR,YSCORE>PR S YSFLAG=1 ; Evaluate Positive response
  1. S MULT=$L(HRR,"-") ; Parse HRR for multiples
  1. F X=1:1:MULT Q:YSFLAG>1 D
  1. . S YSLIM=14600 ; 40 Yrs
  1. . S YSHRT=$P(HRR,"-",X)
  1. . I YSHRT["T" S YSLIM=$$TIME(YSHRT) ; Check for T specific parameter
  1. . I $$FMDIFF^XLFDT($$NOW^XLFDT,DATE,1)>YSLIM Q ;Assignment too old
  1. . I YSHRT?1N.E S SI=+YSHRT D HRSCR Q:YSFLAG>1 ; Test for HR based only on Total Raw score
  1. . I YSFLAG>1 Q ; High Risk flag already set
  1. . I $E(YSHRT,1,2)="YA" D YATAG
  1. . I YSFLAG>1 Q ; High Risk flag already set
  1. . I YSHRT?1"Y".N.E D YTAG
  1. . I YSFLAG>1 Q ; High Risk flag already set
  1. . I $E(YSHRT,1)="A" D ATAG
  1. . I YSFLAG>1 Q ; High Risk flag already set
  1. . I $E(YSHRT,1,2)="I9" D I9TAG ;Check for HR solely on I9 question
  1. . I YSFLAG>1 Q ;High Risk flag already set
  1. . I $E(YSHRT,1)="G" D GTTAG
  1. K ^TMP("YSQA",$J) ; Cleanup ^TMP file
  1. D SETFLAG Q
  1. ;
  1. QUEST(ADMID,INST) ; Create core code to look at questions and answers
  1. ; Requires Administration ID (ADMID) and Instrument name (INST) as an pre-existing value.
  1. N TEMP,QNUM,ANSID,QST,CHOICE,CNT,LEG,I
  1. K ^TMP("YSQA",$J)
  1. S (QNUM,CNT)=0
  1. F S QNUM=$O(^YTT(601.85,"AC",ADMID,QNUM)) Q:QNUM="" D
  1. . S ANSID=$O(^YTT(601.85,"AC",ADMID,QNUM,0))
  1. . S TEMP=^YTT(601.85,ANSID,0)
  1. . S QST="",I=0,CNT=CNT+1
  1. . F S I=$O(^YTT(601.72,$P(TEMP,U,3),1,I)) Q:I="" D
  1. . . I $E(QST,$L(QST))?1A S QST=QST_" "
  1. . . S QST=QST_^YTT(601.72,$P(TEMP,U,3),1,I,0)
  1. . I $P(TEMP,U,4)="NOT ASKED" S CHOICE="NOT ASKED",LEG=""
  1. . E S CHOICE=$S($P(TEMP,U,4)="":"",1:$G(^YTT(601.75,$P(TEMP,U,4),1))),LEG=$S($P(TEMP,U,4)="":"",1:$P($G(^YTT(601.75,$P(TEMP,U,4),0)),U,2))
  1. . I CHOICE="" S CHOICE="Skipped"
  1. . S:'$D(LEG) LEG=""
  1. . S ^TMP("YSQA",$J,INST,CNT)=QST_U_CHOICE_U_LEG
  1. Q
  1. ;
  1. SCORES ;
  1. ;Get total Raw score for administration
  1. N YSDATA
  1. S YS("AD")=ADMID
  1. S YS("CODE")=INST
  1. S YS("ADATE")=DATE ;$P(^YTT(601.84,ADMID,0),U,3)
  1. S YS("DFN")=DFN
  1. K ^TMP($J,"YSCOR"),^TMP($J,"YSG")
  1. D GETSCORE^YTQAPI8(.YSDATA,.YS)
  1. S YSCORE=$P(^TMP($J,"YSCOR",2),"=",2)
  1. Q
  1. ;
  1. TIME(TPAR) ;
  1. N DAYS,INC,PERIOD
  1. S TEMP=$P(TPAR,"T",2)
  1. S INC=+TEMP
  1. S PERIOD=$E(TEMP,$L(TEMP))
  1. I PERIOD="D" S DAYS=INC
  1. I PERIOD="W" S DAYS=INC*7
  1. I PERIOD="M" S DAYS=$P(INC*365/12+.5,".") ;Assume 1 month=30.42 days
  1. Q DAYS
  1. ;
  1. HRSCR ;
  1. I YSCORE>SI,YSFLAG=1 S YSFLAG=3 ; Both High Risk & Positive Response
  1. I YSCORE>SI,YSFLAG<1 S YSFLAG=2 ; High Risk
  1. Q
  1. ;
  1. YTAG ; Yes to any of specific list of questions.
  1. N CNT,CHOICE,TEMP
  1. S TEMP=$E(YSHRT,2,$L(YSHRT))
  1. I TEMP["T" S TEMP=$P(TEMP,"T",1)
  1. S CNT=0
  1. F S CNT=$O(^TMP("YSQA",$J,INST,CNT)) Q:CNT=""!(YSFLAG>1) D
  1. . I TEMP'[CNT Q
  1. . S CHOICE=$P(^TMP("YSQA",$J,INST,CNT),U,2) ; if any are Yes set flag and quit
  1. . S CHOICE=$TR(CHOICE,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ")
  1. . I CHOICE?1"Y".2U D
  1. . . I YSFLAG=1 S YSFLAG=3
  1. . . E S YSFLAG=2
  1. Q
  1. ;
  1. YATAG ; If Yes to any question is High Risk
  1. N CNT,CHOICE
  1. S CNT=0
  1. F S CNT=$O(^TMP("YSQA",$J,INST,CNT)) Q:CNT=""!(YSFLAG>1) D
  1. . S CHOICE=$P(^TMP("YSQA",$J,INST,CNT),U,2) ; if any are Yes set flag and quit
  1. . S CHOICE=$TR(CHOICE,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ")
  1. . I CHOICE?1"Y".2U D
  1. . . I YSFLAG=1 S YSFLAG=3
  1. . . E S YSFLAG=2
  1. Q
  1. ;
  1. ATAG ; any question with a score > that passed in with the A# parameter.
  1. N MIN,AID,TEMP,QID,CHOICEID,LEG
  1. S MIN=$E(YSHRT,2,$L(YSHRT))
  1. S AID=""
  1. F S AID=$O(^YTT(601.85,"AD",ADMID,AID)) Q:AID=""!(YSFLAG>1) D
  1. . S TEMP=^YTT(601.85,AID,0)
  1. . S QID=$P(TEMP,U,3),CHOICEID=$P(TEMP,U,4)
  1. . S LEG=$P(^YTT(601.75,CHOICEID,0),U,2)
  1. . I LEG>MIN D
  1. . . I YSFLAG=1 S YSFLAG=3
  1. . . E S YSFLAG=2
  1. Q
  1. ;
  1. I9TAG ;
  1. N TEST,TEMP,CNT
  1. S TEST="houghts that you would be better off dead",CNT=0
  1. F S CNT=$O(^TMP("YSQA",$J,INST,CNT)) Q:CNT=""!(YSFLAG>1) D
  1. . S TEMP=^TMP("YSQA",$J,INST,CNT)
  1. . I $P(TEMP,U,1)[TEST D
  1. . . I $P(TEMP,U,2)'="",($P(TEMP,U,2)'="Not at all") D
  1. . . . I YSFLAG=1 S YSFLAG=3
  1. . . . E S YSFLAG=2
  1. Q
  1. ;
  1. GTTAG ; specific question with a score > that passed in with the GT# parameter.
  1. ; If any of the comma delimited question#>value, then YSFLAG=2 for HIGH RISK
  1. N MIN,AID,TEMP,QID,CHOICEID,LEG
  1. N QARR,I,PR
  1. S YSFLAG=0
  1. S TEMP=$E(YSHRT,2,$L(YSHRT))
  1. F I=1:1:$L(TEMP,",") D
  1. . S PR=$P(TEMP,",",I)
  1. . S AID=$P(PR,U) Q:AID="" ;If definition malformed
  1. . S QARR(AID)=$P(PR,U,2) ;QARR(Ques#)=Greater Than value
  1. S MIN=$E(YSHRT,2,$L(YSHRT))
  1. S AID=""
  1. F S AID=$O(QARR(AID)) Q:AID="" D
  1. . S TEMP=$G(^TMP("YSQA",$J,INST,AID)) Q:TEMP=""
  1. . S LEG=$P(TEMP,U,3)
  1. . I LEG>QARR(AID) S YSFLAG=2
  1. Q
  1. SETFLAG ; Set YSFLAG into the MH ADMISISTRATION file (#601.84)
  1. N XXX,YSFDA
  1. S XXX=ADMID_","
  1. S YSFDA(601.84,XXX,16)=YSFLAG D FILE^DIE("K","YSFDA","YSERR")
  1. D UPADM^YTQEVNT(ADMID,"flag") ; publish admin update event
  1. Q
  1. ;
  1. BHS ; BHS
  1. ; High Risk: Score of > 8
  1. ; Positive Response: None
  1. N INST,HRR,PR
  1. S INST="BHS"
  1. S HRR=8
  1. S PR=""
  1. D FLAG(DFN,INST,HRR,PR)
  1. Q
  1. ;
  1. BSS ; BSS
  1. ; High Risk: Score > 0 to any question
  1. ; Positive Response: None
  1. N INST,HRR,PR
  1. S INST="BSS"
  1. S HRR="A0"
  1. S PR=""
  1. D FLAG(DFN,INST,HRR,PR)
  1. Q
  1. ;
  1. PHQ2I9 ; PHQ-2+I9
  1. ; High Risk: I9 > 0
  1. ; Positive Response: Score >2
  1. N INST,HRR,PR
  1. S INST="PHQ-2+I9"
  1. S HRR="I9"
  1. S PR=2
  1. D FLAG(DFN,INST,HRR,PR)
  1. Q
  1. ;
  1. PSS3 ; PSS-3
  1. ; High Risk: Yes to any of Q1,2,3 within the last 6 months
  1. ; Positive Response: None
  1. N INST,HRR,PR
  1. S INST="PSS-3"
  1. S HRR="Y1,2,3,T6M"
  1. S PR=""
  1. D FLAG(DFN,INST,HRR,PR)
  1. Q
  1. ;
  1. PSS32ND ; PSS-3 2ND
  1. ; High Risk: Yes to any of the questions
  1. ; Positive Response: None
  1. N INST,HRR,PR
  1. S INST="PSS-3 2ND"
  1. S HRR="YA"
  1. S PR=""
  1. D FLAG(DFN,INST,HRR,PR)
  1. Q
  1. ;
  1. CSSRS ; C-SSRS
  1. ; High Risk: Yes to any of Q3,4,5,8
  1. ; Positive Response: None
  1. N INST,HRR,PR
  1. S INST="C-SSRS"
  1. S HRR="Y3,4,5,8"
  1. S PR=""
  1. D FLAG(DFN,INST,HRR,PR)
  1. Q
  1. ;
  1. I9CSSRS ; I9+C-SSRS
  1. ; High Risk: Yes to any of Q3,4,5,8 or I9 > 0
  1. ; Positive Response: None
  1. N INST,HRR,PR
  1. S INST="I9+C-SSRS"
  1. S HRR="Y3,4,5,8-I9"
  1. S PR=""
  1. D FLAG(DFN,INST,HRR,PR)
  1. Q
  1. ;
  1. PHQ9 ; PHQ9 Instrument
  1. ; High Risk: I9 > 0
  1. ; Positive Response: Score > 9
  1. N INST,HRR,PR
  1. S INST="PHQ9"
  1. S HRR="I9"
  1. S PR=9
  1. D FLAG(DFN,INST,HRR,PR)
  1. Q
  1. ;
  1. PTSD5I9 ; PC-PTSD-5+19
  1. ; High Risk: I9 > 0
  1. ; Positive Response: None
  1. N INST,HRR,PR
  1. S INST="PC-PTSD-5+I9"
  1. S HRR="I9"
  1. S PR=""
  1. D FLAG(DFN,INST,HRR,PR)
  1. Q
  1. ;
  1. BDI2 ; BDI2 Instrument
  1. ; High Risk: Question 9 > 0
  1. N INST,HRR,PR
  1. S INST="BDI2"
  1. S HRR="G9^0"
  1. S PR=""
  1. D FLAG(DFN,INST,HRR,PR)
  1. Q
  1. CCSA ; CCSA-DSM5 Instrument
  1. ; High Risk: Question 9 > 0
  1. N INST,HRR,PR
  1. S INST="CCSA-DSM5"
  1. S HRR="G11^0"
  1. S PR=""
  1. D FLAG(DFN,INST,HRR,PR)
  1. Q
  1. ;