- YTAPI10A ;ALB/ASF- PSYCH TEST API FOR CLINICAL REMINDERS ;09/20/2004
- ;;5.01;MENTAL HEALTH;**77**;Dec 30, 1994
- ;Reference to ^PXRMINDX(601.2, supported by DBIA #4114
- SET(X) ;
- S N=N+1
- S YSSUB(N)=X
- Q
- OCCUR(YSSUB,YS) ;occurances OF TESTS,GAF,ASI
- ;Input:
- ;YS("CODE"): Test code NUMBER from file 601 including "ASI","GAF"
- ;YS("BEGIN"): inclusive date in %DT acceptable format (11/11/2011) to begin search [optional]
- ;YS("END"): inclusive date in %DT acceptable format (11/11/2011) to end search [optional]
- ;YS("LIMIT"): Last N administrations [optional]
- ;Output
- ;^TMP($J,YSSUB,1)=[DATA]^NUMBER FOUND
- ;^TMP($J,YSSUB,DFN,OCCURANCE)=DAS^DFN^TEST (DAS=entry endas^ytapi10)
- N G,YSLIMIT,YSJJ,YSSONE,S,R,N,YSN2,N4,I,II,DFN,YSCODE,YSADATE,YSSCALE,YSBED,YSEND,YSAA,DAS,YSOCC,YSZN,YST,YSLM
- N IFN,R1,R2,R3,SFN1,SFN2,YSBEG,YSCK,YSDFN,YSED,YSIFN,YSINUM,YSITEM,YSN2,YSNODE,YSPRIV,YSQT,YSR,YSSTAFF,YSTYPE,YSCODE,NI,YSID
- D PARSE^YTAPI(.YS)
- S YSLM=$G(YS("LIMIT")) S:YSLM'?1N.N YSLM=1
- S N=0
- K ^TMP($J,YSSUB)
- I '$D(^YTT(601,"B",YSCODE)) S ^TMP($J,YSSUB,1)="[ERROR]^BAD TEST CODE #" Q ;-->out
- S YSCODE=$O(^YTT(601,"B",YSCODE,0))
- I $P(^YTT(601,YSCODE,0),U)="ASI" D ASIOC Q ;-->out
- I $P(^YTT(601,YSCODE,0),U)="GAF" D GAFOC Q ;-->out
- P0 S DFN=0,NI=0 F S DFN=$O(^PXRMINDX(601.2,"IP",YSCODE,DFN)) Q:DFN'>0 S YS("DFN")=DFN D P1
- S ^TMP($J,YSSUB)="[DATA]"_U_NI
- Q
- P1 I $D(^YTT(601,YSCODE)) S YSN2=YSEND+.1,YSOCC=0 F S YSN2=$O(^YTD(601.2,DFN,1,YSCODE,1,YSN2),-1) Q:YSN2'>0!(YSN2<YSBEG) D
- . S YSOCC=YSOCC+1
- . Q:(YSOCC>YSLM)
- . S NI=NI+1
- . S ^TMP($J,YSSUB,DFN,YSOCC)=DFN_";1;"_YSCODE_";1;"_YSN2_U_YSN2_U_YSCODE
- Q
- GAFOC ;all axis5 DXs in time frame
- S YST=YSEND+.0000001,NI=0
- F S YST=$O(^YSD(627.8,"B",YST),-1) Q:YST'>0!(YST<YSBEG) S IFN=0 F S IFN=$O(^YSD(627.8,"B",YST,IFN)) Q:IFN'>0 D
- . S X=$P($G(^YSD(627.8,IFN,60)),U,3)
- . Q:X=""
- . S DFN=$P($G(^YSD(627.8,IFN,0)),U,2) Q:DFN'>0 ;bad dfn
- . S YSOCC=$O(^TMP($J,YSSUB,DFN,999999),-1)+1
- . Q:(YSOCC>YSLM)
- . S NI=NI+1
- . S ^TMP($J,YSSUB,DFN,YSOCC)=DFN_";1;"_YSCODE_";1;"_IFN_U_YST_U_YSCODE
- S ^TMP($J,YSSUB)="[DATA]"_U_NI
- Q
- ASIOC ;
- S NI=0,DFN=0,YSID=YSEND+.01
- F S YSID=$O(^YSTX(604,"AD",YSID),-1) Q:(YSID'>0)!(YSID<YSBEG) S IFN=0 F S IFN=$O(^YSTX(604,"AD",YSID,IFN)) Q:IFN'>0 D
- . Q:'$D(^YSTX(604,IFN,.5)) ; no sig
- . S G=$G(^YSTX(604,IFN,0))
- . S DFN=$P(G,U,2) Q:DFN'>0 ;bad dfn
- . S YSOCC=$O(^TMP($J,YSSUB,DFN,999999),-1)+1
- . Q:(YSOCC>YSLM)
- . S NI=NI+1
- . S ^TMP($J,YSSUB,DFN,YSOCC)=DFN_";1;"_YSCODE_";1;"_IFN_U_$P(G,U,5)_U_Y
- S ^TMP($J,YSSUB)="[DATA]"_U_NI
- Q
- PTTEST(YSDATA,YS) ;all data scores for a specific patient
- ;Input:
- ;YS("DFN"): Patient IFN from file2
- ;YS("CODE"): Test code NUMBER from file 601 including "ASI","GAF"
- ;YS("BEGIN"): inclusive date in %DT acceptable format (11/11/2011) to begin search [optional]
- ;YS("END"): inclusive date in %DT acceptable format (11/11/2011) to end search [optional]
- ;YS("LIMIT"): Last N administrations [optional]
- ;Output
- ;YSDATA(1)=[DATA]^NUMBER FOUND
- ;YSDATA(OCCURANCE,1:999) most recent to least recent occurance for this test for this patient
- N YSBEG,YSCODE,R1,R2,R3,YSADATE,YSEND,YSLIMIT,YSLM,YSOCC,YSSCALE,YSSTAFF,YSZ,YSZN,G,YSORT
- D PARSE^YTAPI(.YS)
- S YSLM=$G(YS("LIMIT")) S:YSLM="" YSLM=1
- I YSLM'?1NP.N!(YSLM=0) S YSDATA(1)="[ERROR]",YSDATA(2)="bad limit" Q ;-->out
- S YSORT=$S(YSLM<0:1,1:-1) ;set sort order
- I YSLM>0 S YSID=YSEND+.00001
- E S YSID=YSBEG-.00001,YSLM=YSLM*-1
- I YSCODE="ASI" D ASIPT Q ;-->out
- I YSCODE="GAF" D GAFPT Q ;-->out
- S YSCODE=$O(^YTT(601,"B",YSCODE,0))
- S NI=0
- F S YSID=$O(^PXRMINDX(601.2,"PI",DFN,YSCODE,YSID),YSORT) Q:(YSID'>0)!(YSID<YSBEG)!(YSID>YSEND)!(NI=YSLM) D
- . S DAS=DFN_";;"_YSCODE_";;"_YSID
- . S DAS=DFN_";1;"_YSCODE_";1;"_YSID
- . S YSOCC=$O(YSDATA(9999999),-1)+1 S:YSOCC<2 YSOCC=2
- . S YSDATA(YSOCC)=DAS_U_YSID,NI=NI+1
- S YSDATA(1)="[DATA]"_U_NI
- Q
- GAFPT ;gaf for pt IN time
- S IFN=$S(YSORT=1:0,1:9999999),NI=0
- K ^TMP($J,"YSGAF")
- S YSCODE=$O(^YTT(601,"B","GAF",0))
- F S IFN=$O(^YSD(627.8,"C",DFN,IFN),YSORT) Q:(IFN'>0)!(NI=YSLM) D
- . S X=$P($G(^YSD(627.8,IFN,60)),U,3)
- . Q:X=""
- . S X=$P($G(^YSD(627.8,IFN,0)),U,3)
- . Q:(X<YSBEG)!(X>YSEND)
- . S NI=NI+1
- . S ^TMP($J,"YSGAF",X,IFN)=""
- S X=$S(YSORT=1:0,1:9999999)
- F S X=$O(^TMP($J,"YSGAF",X),YSORT) Q:X'>0 S IFN=0 F S IFN=$O(^TMP($J,"YSGAF",X,IFN)) Q:IFN'>0 D
- . S YSOCC=$O(YSDATA(9999999),-1)+1 S:YSOCC<2 YSOCC=2
- . S DAS=DFN_";1;"_YSCODE_";1;"_IFN
- . S YSDATA(YSOCC)=DAS_U_X
- S YSDATA(1)="[DATA]"_U_NI
- Q
- ASIPT ;asis for pt IN time
- S IFN=$S(YSORT=1:0,1:9999999),NI=0
- S YSCODE=$O(^YTT(601,"B","ASI",0))
- F S IFN=$O(^YSTX(604,"C",DFN,IFN),YSORT) Q:IFN'>0!(NI=YSLM) D
- . Q:'$D(^YSTX(604,IFN,.5)) ; no sig
- . S X=$P($G(^YSTX(604,IFN,0)),U,5)
- . Q:X=""
- . Q:(X<YSBEG)!(X>YSEND)
- . S YSOCC=$O(YSDATA(9999999),-1)+1 S:YSOCC<2 YSOCC=2
- . S NI=NI+1
- . S DAS=DFN_";1;"_YSCODE_";1;"_IFN
- . S YSDATA(YSOCC)=DAS_U_X
- S YSDATA(1)="[DATA]"_U_NI
- Q
- --- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HYTAPI10A 5054 printed Feb 18, 2025@23:43:04 Page 2
- YTAPI10A ;ALB/ASF- PSYCH TEST API FOR CLINICAL REMINDERS ;09/20/2004
- +1 ;;5.01;MENTAL HEALTH;**77**;Dec 30, 1994
- +2 ;Reference to ^PXRMINDX(601.2, supported by DBIA #4114
- SET(X) ;
- +1 SET N=N+1
- +2 SET YSSUB(N)=X
- +3 QUIT
- OCCUR(YSSUB,YS) ;occurances OF TESTS,GAF,ASI
- +1 ;Input:
- +2 ;YS("CODE"): Test code NUMBER from file 601 including "ASI","GAF"
- +3 ;YS("BEGIN"): inclusive date in %DT acceptable format (11/11/2011) to begin search [optional]
- +4 ;YS("END"): inclusive date in %DT acceptable format (11/11/2011) to end search [optional]
- +5 ;YS("LIMIT"): Last N administrations [optional]
- +6 ;Output
- +7 ;^TMP($J,YSSUB,1)=[DATA]^NUMBER FOUND
- +8 ;^TMP($J,YSSUB,DFN,OCCURANCE)=DAS^DFN^TEST (DAS=entry endas^ytapi10)
- +9 NEW G,YSLIMIT,YSJJ,YSSONE,S,R,N,YSN2,N4,I,II,DFN,YSCODE,YSADATE,YSSCALE,YSBED,YSEND,YSAA,DAS,YSOCC,YSZN,YST,YSLM
- +10 NEW IFN,R1,R2,R3,SFN1,SFN2,YSBEG,YSCK,YSDFN,YSED,YSIFN,YSINUM,YSITEM,YSN2,YSNODE,YSPRIV,YSQT,YSR,YSSTAFF,YSTYPE,YSCODE,NI,YSID
- +11 DO PARSE^YTAPI(.YS)
- +12 SET YSLM=$GET(YS("LIMIT"))
- if YSLM'?1N.N
- SET YSLM=1
- +13 SET N=0
- +14 KILL ^TMP($JOB,YSSUB)
- +15 ;-->out
- IF '$DATA(^YTT(601,"B",YSCODE))
- SET ^TMP($JOB,YSSUB,1)="[ERROR]^BAD TEST CODE #"
- QUIT
- +16 SET YSCODE=$ORDER(^YTT(601,"B",YSCODE,0))
- +17 ;-->out
- IF $PIECE(^YTT(601,YSCODE,0),U)="ASI"
- DO ASIOC
- QUIT
- +18 ;-->out
- IF $PIECE(^YTT(601,YSCODE,0),U)="GAF"
- DO GAFOC
- QUIT
- P0 SET DFN=0
- SET NI=0
- FOR
- SET DFN=$ORDER(^PXRMINDX(601.2,"IP",YSCODE,DFN))
- if DFN'>0
- QUIT
- SET YS("DFN")=DFN
- DO P1
- +1 SET ^TMP($JOB,YSSUB)="[DATA]"_U_NI
- +2 QUIT
- P1 IF $DATA(^YTT(601,YSCODE))
- SET YSN2=YSEND+.1
- SET YSOCC=0
- FOR
- SET YSN2=$ORDER(^YTD(601.2,DFN,1,YSCODE,1,YSN2),-1)
- if YSN2'>0!(YSN2<YSBEG)
- QUIT
- Begin DoDot:1
- +1 SET YSOCC=YSOCC+1
- +2 if (YSOCC>YSLM)
- QUIT
- +3 SET NI=NI+1
- +4 SET ^TMP($JOB,YSSUB,DFN,YSOCC)=DFN_";1;"_YSCODE_";1;"_YSN2_U_YSN2_U_YSCODE
- End DoDot:1
- +5 QUIT
- GAFOC ;all axis5 DXs in time frame
- +1 SET YST=YSEND+.0000001
- SET NI=0
- +2 FOR
- SET YST=$ORDER(^YSD(627.8,"B",YST),-1)
- if YST'>0!(YST<YSBEG)
- QUIT
- SET IFN=0
- FOR
- SET IFN=$ORDER(^YSD(627.8,"B",YST,IFN))
- if IFN'>0
- QUIT
- Begin DoDot:1
- +3 SET X=$PIECE($GET(^YSD(627.8,IFN,60)),U,3)
- +4 if X=""
- QUIT
- +5 ;bad dfn
- SET DFN=$PIECE($GET(^YSD(627.8,IFN,0)),U,2)
- if DFN'>0
- QUIT
- +6 SET YSOCC=$ORDER(^TMP($JOB,YSSUB,DFN,999999),-1)+1
- +7 if (YSOCC>YSLM)
- QUIT
- +8 SET NI=NI+1
- +9 SET ^TMP($JOB,YSSUB,DFN,YSOCC)=DFN_";1;"_YSCODE_";1;"_IFN_U_YST_U_YSCODE
- End DoDot:1
- +10 SET ^TMP($JOB,YSSUB)="[DATA]"_U_NI
- +11 QUIT
- ASIOC ;
- +1 SET NI=0
- SET DFN=0
- SET YSID=YSEND+.01
- +2 FOR
- SET YSID=$ORDER(^YSTX(604,"AD",YSID),-1)
- if (YSID'>0)!(YSID<YSBEG)
- QUIT
- SET IFN=0
- FOR
- SET IFN=$ORDER(^YSTX(604,"AD",YSID,IFN))
- if IFN'>0
- QUIT
- Begin DoDot:1
- +3 ; no sig
- if '$DATA(^YSTX(604,IFN,.5))
- QUIT
- +4 SET G=$GET(^YSTX(604,IFN,0))
- +5 ;bad dfn
- SET DFN=$PIECE(G,U,2)
- if DFN'>0
- QUIT
- +6 SET YSOCC=$ORDER(^TMP($JOB,YSSUB,DFN,999999),-1)+1
- +7 if (YSOCC>YSLM)
- QUIT
- +8 SET NI=NI+1
- +9 SET ^TMP($JOB,YSSUB,DFN,YSOCC)=DFN_";1;"_YSCODE_";1;"_IFN_U_$PIECE(G,U,5)_U_Y
- End DoDot:1
- +10 SET ^TMP($JOB,YSSUB)="[DATA]"_U_NI
- +11 QUIT
- PTTEST(YSDATA,YS) ;all data scores for a specific patient
- +1 ;Input:
- +2 ;YS("DFN"): Patient IFN from file2
- +3 ;YS("CODE"): Test code NUMBER from file 601 including "ASI","GAF"
- +4 ;YS("BEGIN"): inclusive date in %DT acceptable format (11/11/2011) to begin search [optional]
- +5 ;YS("END"): inclusive date in %DT acceptable format (11/11/2011) to end search [optional]
- +6 ;YS("LIMIT"): Last N administrations [optional]
- +7 ;Output
- +8 ;YSDATA(1)=[DATA]^NUMBER FOUND
- +9 ;YSDATA(OCCURANCE,1:999) most recent to least recent occurance for this test for this patient
- +10 NEW YSBEG,YSCODE,R1,R2,R3,YSADATE,YSEND,YSLIMIT,YSLM,YSOCC,YSSCALE,YSSTAFF,YSZ,YSZN,G,YSORT
- +11 DO PARSE^YTAPI(.YS)
- +12 SET YSLM=$GET(YS("LIMIT"))
- if YSLM=""
- SET YSLM=1
- +13 ;-->out
- IF YSLM'?1NP.N!(YSLM=0)
- SET YSDATA(1)="[ERROR]"
- SET YSDATA(2)="bad limit"
- QUIT
- +14 ;set sort order
- SET YSORT=$SELECT(YSLM<0:1,1:-1)
- +15 IF YSLM>0
- SET YSID=YSEND+.00001
- +16 IF '$TEST
- SET YSID=YSBEG-.00001
- SET YSLM=YSLM*-1
- +17 ;-->out
- IF YSCODE="ASI"
- DO ASIPT
- QUIT
- +18 ;-->out
- IF YSCODE="GAF"
- DO GAFPT
- QUIT
- +19 SET YSCODE=$ORDER(^YTT(601,"B",YSCODE,0))
- +20 SET NI=0
- +21 FOR
- SET YSID=$ORDER(^PXRMINDX(601.2,"PI",DFN,YSCODE,YSID),YSORT)
- if (YSID'>0)!(YSID<YSBEG)!(YSID>YSEND)!(NI=YSLM)
- QUIT
- Begin DoDot:1
- +22 SET DAS=DFN_";;"_YSCODE_";;"_YSID
- +23 SET DAS=DFN_";1;"_YSCODE_";1;"_YSID
- +24 SET YSOCC=$ORDER(YSDATA(9999999),-1)+1
- if YSOCC<2
- SET YSOCC=2
- +25 SET YSDATA(YSOCC)=DAS_U_YSID
- SET NI=NI+1
- End DoDot:1
- +26 SET YSDATA(1)="[DATA]"_U_NI
- +27 QUIT
- GAFPT ;gaf for pt IN time
- +1 SET IFN=$SELECT(YSORT=1:0,1:9999999)
- SET NI=0
- +2 KILL ^TMP($JOB,"YSGAF")
- +3 SET YSCODE=$ORDER(^YTT(601,"B","GAF",0))
- +4 FOR
- SET IFN=$ORDER(^YSD(627.8,"C",DFN,IFN),YSORT)
- if (IFN'>0)!(NI=YSLM)
- QUIT
- Begin DoDot:1
- +5 SET X=$PIECE($GET(^YSD(627.8,IFN,60)),U,3)
- +6 if X=""
- QUIT
- +7 SET X=$PIECE($GET(^YSD(627.8,IFN,0)),U,3)
- +8 if (X<YSBEG)!(X>YSEND)
- QUIT
- +9 SET NI=NI+1
- +10 SET ^TMP($JOB,"YSGAF",X,IFN)=""
- End DoDot:1
- +11 SET X=$SELECT(YSORT=1:0,1:9999999)
- +12 FOR
- SET X=$ORDER(^TMP($JOB,"YSGAF",X),YSORT)
- if X'>0
- QUIT
- SET IFN=0
- FOR
- SET IFN=$ORDER(^TMP($JOB,"YSGAF",X,IFN))
- if IFN'>0
- QUIT
- Begin DoDot:1
- +13 SET YSOCC=$ORDER(YSDATA(9999999),-1)+1
- if YSOCC<2
- SET YSOCC=2
- +14 SET DAS=DFN_";1;"_YSCODE_";1;"_IFN
- +15 SET YSDATA(YSOCC)=DAS_U_X
- End DoDot:1
- +16 SET YSDATA(1)="[DATA]"_U_NI
- +17 QUIT
- ASIPT ;asis for pt IN time
- +1 SET IFN=$SELECT(YSORT=1:0,1:9999999)
- SET NI=0
- +2 SET YSCODE=$ORDER(^YTT(601,"B","ASI",0))
- +3 FOR
- SET IFN=$ORDER(^YSTX(604,"C",DFN,IFN),YSORT)
- if IFN'>0!(NI=YSLM)
- QUIT
- Begin DoDot:1
- +4 ; no sig
- if '$DATA(^YSTX(604,IFN,.5))
- QUIT
- +5 SET X=$PIECE($GET(^YSTX(604,IFN,0)),U,5)
- +6 if X=""
- QUIT
- +7 if (X<YSBEG)!(X>YSEND)
- QUIT
- +8 SET YSOCC=$ORDER(YSDATA(9999999),-1)+1
- if YSOCC<2
- SET YSOCC=2
- +9 SET NI=NI+1
- +10 SET DAS=DFN_";1;"_YSCODE_";1;"_IFN
- +11 SET YSDATA(YSOCC)=DAS_U_X
- End DoDot:1
- +12 SET YSDATA(1)="[DATA]"_U_NI
- +13 QUIT