YTQPXRM5 ;ASF/ALB CLINICAL REMINDERS CONT ; 7/13/07 2:27pm ;;5.01;MENTAL HEALTH;**85**;DEC 30,1994;Build 48 ; Q CRTEST(YSDATA,YS) ;clinical reminders approrpiate instruments ;input: LIMIT highest # of questions allowed (25 is default) ;output: [DATA] vs [ERROR] 0K vs error msg ; test_name^601.71 ien^# of questions N YSLIMIT,YSCODE,YSCODEN,YSNUMB,YSG,YSIEN,YSOPER,YSQG2,YSERR,YSCTYPE,YSCHT,YSCHOICE,YSLEG,YSQN,YSNN K YSDATA S YSLIMIT=$G(YS("LIMIT"),25) S YSDATA(1)="[DATA]",YSNN=1 S YSCODE="" F S YSCODE=$O(^YTT(601.71,"B",YSCODE)) Q:YSCODE="" S YSERR=0,YSNUMB=0,YSCODEN=$O(^YTT(601.71,"B",YSCODE,0)) D TCK,SETCR Q TCK ;check a test for CR S YSOPER=$$GET1^DIQ(601.71,YSCODEN_",",10,"I") IF YSOPER="C" S YSNUMB="C" Q ;-->out ASF 11/1/06 Q:(YSOPER'="Y") S YSIEN=0 F S YSIEN=$O(^YTT(601.76,"AC",YSCODEN,YSIEN)) Q:YSIEN'>0 S YSNUMB=YSNUMB+1 Q SETCR ;set out queue I (YSNUMB=0)!(YSNUMB>YSLIMIT)!(YSERR=1) Q ;->out S YSNN=YSNN+1,YSDATA(YSNN)=YSCODE_U_YSCODEN_U_YSNUMB Q ONECR(YSCODEN,YSLIMIT) ;FUNCTION check one test for CR ;input YSCODEN ien OF 601.71 ; YSLIMIT # OF QUESTIONS (25 DEFAULT) ;output 1: OK for CR ; N YSOPER,YSERR,YSIEN,YSNUMB S YSOK=0 I '$D(^YTT(601.71,YSCODEN,0)) Q YSOK ;->out I $P(^YTT(601.71,YSCODEN,0),U)="ASI" Q YSOK ;-->out S YSLIMIT=$G(YSLIMIT,25) S YSNUMB=0,YSERR=0 D TCK I (YSNUMB=0)!(YSNUMB>YSLIMIT)!(YSERR=1) Q YSOK ;->out S YSOK=1 Q YSOK SHOWALL(YSDATA,YS) ; ;returns all item information for a specified test ; same format as SHOWALL^YTAPI3 N G,YSCODE,YSCODEN,YSNUMB,YSEQ,YSIEN,YSR,YSCTYPE,YSG,YSQN,YSQG2,YSCHTSEQ,YSLEG,YSCTEXT,YSCHOICE,YSINTRO,YSLINES,N1 K YSDATA S YSCODE=$G(YS("CODE"),0) I '$D(^YTT(601.71,"B",YSCODE)) S YSDATA(1)="[ERROR]",YSDATA(2)="INCORRECT TEST CODE" Q S YSCODEN=$O(^YTT(601.71,"B",YSCODE,0)) S YSNUMB=0 S YSDATA(1)="[DATA]" S YSDATA(2)=YSCODE_U_$P(^YTT(601.71,YSCODEN,0),U,3) ;Loop thru test for all items S YSEQ=0 F S YSEQ=$O(^YTT(601.76,"AD",YSCODEN,YSEQ)) Q:YSEQ'>0 S YSIEN=$O(^YTT(601.76,"AD",YSCODEN,YSEQ,0)) Q:YSIEN'>0 S YSNUMB=YSNUMB+1,YSR=0 D . S YSG=^YTT(601.76,YSIEN,0),YSQN=$P(YSG,U,4),YSQG2=$G(^YTT(601.72,YSQN,2)) . D GETTEXT . S YSCTYPE=$P(YSQG2,U,3) Q:YSCTYPE="" ;->out . S YSCHTSEQ=0 F S YSCHTSEQ=$O(^YTT(601.751,"AC",YSCTYPE,YSCHTSEQ)) Q:YSCHTSEQ'>0 D .. S YSCHOICE=$O(^YTT(601.751,"AC",YSCTYPE,YSCHTSEQ,0)) Q:YSCHOICE'>0 D ... S YSCTEXT=$G(^YTT(601.75,YSCHOICE,1)) ... S YSLEG=$P($G(^YTT(601.75,YSCHOICE,0)),U,2) ... D RESP Q GETTEXT ;pull text and intros S N1=0,YSLINES=0 F S N1=$O(^YTT(601.72,YSQN,1,N1)) Q:N1'>0 S YSLINES=N1 D . S YSDATA(YSNUMB,"T",N1)=^YTT(601.72,YSQN,1,N1,0) S YSLINES=YSLINES+1,YSDATA(YSNUMB,"T",YSLINES)=" " S YSINTRO=$P($G(^YTT(601.72,YSQN,2)),U) Q:YSINTRO'?1N.N S N1=0 F S N1=$O(^YTT(601.73,YSINTRO,1,N1)) Q:N1'>0 D . S YSDATA(YSNUMB,"I",N1)=^YTT(601.73,YSINTRO,1,N1,0) Q RESP ;get approp responses S YSDATA(YSNUMB,"R",1)="Answer= " S YSDATA(YSNUMB,"R",0)=$G(YSDATA(YSNUMB,"R",0))_YSLEG S YSLINES=YSLINES+1,YSDATA(YSNUMB,"T",YSLINES)=YSLEG_". "_YSCTEXT Q SCALES(YSDATA,YSCODEN) ;scales for a test ;input :YSCODEN AS 601.71 IEN ;output scalename^601.82 ENTRY N G,YSCODE,N,N1,YS1,YSZ,YS87,YSONLY,YSNAME ;S YSCODEN=$G(YS("CODE"),0) I '$D(^YTT(601.71,YSCODEN,0)) S YSDATA(1)="[ERROR]",YSDATA(2)="bad code" Q ;->out S YSCODE=$P(^YTT(601.71,YSCODEN,0),U) I YSCODE="ASI" D Q ;-->out . S YSDATA(1)="[DATA]" . S YSDATA("S",1)="Medical" . S YSDATA("S",2)="Employment" . S YSDATA("S",3)="Alcohol" . S YSDATA("S",4)="Drug" . S YSDATA("S",5)="Legal" . S YSDATA("S",6)="Family" . S YSDATA("S",7)="Psychiatric" S YS1("CODE")=YSCODE D SCALEG^YTQAPI3(.YSZ,.YS1) S YSDATA(1)="[DATA]" S N=0 F S N=$O(^TMP($J,"YSG",N)) Q:N'>0 D . S G=^TMP($J,"YSG",N) . S YSNAME=$P(G,U,4),YS87=$P($P(G,U,1),"=",2) . Q:G'?1"Scale".E . S:'$D(YSONLY(YSNAME)) YSONLY(YSNAME)="",YSDATA("S",YS87)=YSNAME K ^TMP($J,"YSG") Q SCNAME(YSIEN) ;get scale name from 601.87 ien ;input 601.87 ien N YS87 S YS87=0 Q:YSIEN'?1N.N YS87 ;out--> Q:'$D(^YTT(601.87,YSIEN)) YS87 ;out--> S YS87=$$GET1^DIQ(601.87,YSIEN_",",3) Q YS87 ALLKEYS(YSDATA,YS) ;Return ALL or most KEYS that a user has. ;input IEN as internal of file 200 [optional/DUZ] N YSIEN,I,J,K,L K ^TMP("YSXU",$J) S YSIEN=$G(YS("IEN")) S:YSIEN="" YSIEN=DUZ I YSIEN'>0 S YSDATA(1)="[ERROR]" Q S I=0,L=1,YSDATA(1)="[DATA]" F S I=$O(^VA(200,YSIEN,51,I)) Q:I'>0 S K=$G(^DIC(19.1,I,0)) D . S L=L+1,YSDATA(L)=$P(K,U,1) . Q