YTCHECK ;SLC/TGA-CHECK PSYCH TEST/INTERVIEW DATA BASE ; 7/10/89  11:21 ;03/11/94 12:13
 ;;5.01;MENTAL HEALTH;;Dec 30, 1994
 ;
 ; Called from the top by  MENU option YSMCHK
 ;
S ;
 W @IOF,?22,"Check Psych Test/Interview Data Base"
 W !!,"You may use this option for individual patients or all patients."
 W !,"If you use it for individual patients, you may elect to delete any unknown"
 W !,"tests/interviews and any tests/interviews with erroneous response sets."
 W !,"If you use it for all patients, you may elect to print a list of errors or"
 W !,"automatically delete all unknown patients, unknown instruments, and all"
 W !,"instruments with erroneous response sets."
 W !!,"THIS OPTION SHOULD NOT BE RUN WHILE TESTS/INTERVIEWS ARE UNDERWAY!",$C(7)
1 ;
 W !!,"Check (I)ndividual patient or (A)ll patients:  I// " R A:DTIME S YSTOUT='$T,YSUOUT=A["^" G:YSTOUT!YSUOUT KIL S A=$TR($E(A),"ia","IA")
 I "AI"'[A W:A'["?" " ?",$C(7) W !,"Type 'I' to check an individial patient's data or 'A' to check all patients." G 1
 S YSN=$S("I"[A:0,1:1),YSD=0,YSE=0 G:'YSN 2
 R !!,"(L)ist or (D)elete errors: ",A:DTIME S YSTOUT='$T,YSUOUT=A["^" G:YSTOUT!YSUOUT KIL S A=$TR($E(A),"ld","LD") I "LD"'[A W:A'["?" " ?",$C(7) G S
 S YSD=$S("D"[A:1,1:0)
2 ;
 R !!,"Shall I list discontinued session(s)" S %=0 D YN^DICN G:"^"[%Y KIL I %Y["?" W !?4,"Answer 'YES' or 'NO'." G 2
 S YSL=$S(%=1:1,1:0) I 'YSN D ^YSLRP G:YSDFN<1 KIL S P=YSDFN D P1 G:YSDFN<1 KIL D INC:YSL,T G END
 S %ZIS="Q" D ^%ZIS G:POP KIL I $D(IO("Q")) S ZTRTN="ENP^YTCHECK",ZTSAVE("YS*")="",ZTDESC="YS DB CHECK" D ^%ZTLOAD G KIL
ENP ;
 U IO D HD S (P,P(0))=0,P1="" F  S P=$O(^YTD(601.2,P)) Q:'P  D P,T
 I YSL S P=0 F  S P=$O(^YTD(601.4,P)) Q:'P  S YSNM=$S($D(^DPT(P,0)):$P(^(0),U),1:"UNKNOWN PATIENT") D INC
 G END
CK ;
 ;G:'$D(^YTT(601,T,0)) CK1 S L=$P(^(0),U,11),L1=0 S:$G(^YTD(601.2,P,1,T,1,D,99))="MMPIR" L=1132 L +^YTD(601.2,P) S I=0 F  S I=$O(^YTD(601.2,P,1,T,1,D,I)) Q:'I!(I>50)  S L1=L1+$L(^(I))
 G:'$D(^YTT(601,T,0)) CK1
 S L=$P(^(0),U,11),L1=0
 L +^YTD(601.2,P) S I=0
 F  S I=$O(^YTD(601.2,P,1,T,1,D,I)) Q:'I!(I>50)  S L1=L1+$L(^(I))
 ;
 ; 3/10/94 LJA  Changes made to display MMPR correctly, when it is...
 L -^YTD(601.2,P)
 I L'=L1,$$MMPIRCK(L,L1) D
 .  S YSE=YSE+1 D:IOST?1"P".E HD:$Y+9>IOSL W ! W:YSN YSNM
 .  W ?31,"Response set length error on " S X=$P(^YTT(601,T,0),U)
 .  ;  Following line commented on 4/29/94.  LJA.
 .  ;I L'=L1,T=60,$G(^YTD(601.2,+P,1,+T,1,+D,99))="MMPIR" S X="MMPIR"
 .  ;
 .  W X,!?31,"expected ",L," got ",L1
 .  D DEL:'YSN
 .  I YSD K ^YTD(601.2,+P,1,+T,1,+D) W " - DELETED" QUIT
CK1 ;
 S D(0)=D(0)+1,C=D
 QUIT
 ;
MMPIRCK(L,L1) ;  If MMPIR and EXP=566 and GOT=1132... OK
 ;  This code "compensates" for MMPR longs (MMPIs) entered before
 ;  YS*5*17.  These entries still have 1132 (2 x 566) responses...
 ;
 ;  Report 1 (ok) if anything other than an MMPIR
 I $G(^YTD(601.2,+P,1,+T,1,+D,99))'="MMPIR" QUIT 1 ;->
 ;
 ;  This is an MMPIR...
 QUIT '(L=566&(L1=1132))
 ;
D ;
 S D(0)=0 I '$D(^YTT(601,T,0)) S YSE=YSE+1 D:IOST?1"P".E HD:$Y+8>IOSL W ! W:YSN YSNM W ?31,"Unknown Instrument" S X="instrument" D DEL:'YSN I YSD K ^YTD(601.2,P,1,T),^YTD(601.2,P,1,"B",T) W " - DELETED" Q
 S D=0 F  S D=$O(^YTD(601.2,P,1,T,1,D)) Q:'D  D CK
 I D(0)>0 L +^YTD(601.2,P,1,T,1,0) S ^YTD(601.2,P,1,T,1,0)="^601.22DA^"_C_"^"_D(0) L -^YTD(601.2,P,1,T,1,0) S:'$D(^YTD(601.2,P,1,"B",T,T)) ^(T)="" Q
 K ^YTD(601.2,P,1,T) Q
T ;
 S (T(0),T)=0 F  S T=$O(^YTD(601.2,P,1,T)) Q:'T  D D I D(0)>0 S T(0)=T(0)+1,H=T S:'$D(^YTD(601.2,P,1,"B",T,T)) ^(T)=""
 I T(0)>0 L +^YTD(601.2,P,1,0) S ^YTD(601.2,P,1,0)="^601.21PA^"_H_"^"_T(0) L -^YTD(601.2,P,1,0) S:YSN P(0)=P(0)+1,P1=P
 I T(0)>0 S I=0 F  S I=$O(^YTD(601.2,P,1,"B",I)) Q:'I  K:'$D(^YTD(601.2,P,1,I,0)) ^YTD(601.2,P,1,"B",I)
 Q:T(0)  K ^YTD(601.2,P),^YTD(601.2,"B",P) Q:YSN  L +^YTD(601.2,0) S X=$P(^YTD(601.2,0),U,4),X=X-1 S:X<1 X=0 S $P(^(0),U,4)=X L -^YTD(601.2,0) Q
P ;
 S YSDFN=P,YSNM=$S($D(^DPT(P,0)):$P(^(0),U),1:"Unknown Patient") I '$D(^DPT(P,0)) S YSE=YSE+1 D:IOST?1"P".E HD:$Y+8>IOSL W !,"Unknown patient found" I YSD K ^YTD(601.2,P),^YTD(601.2,"B",P,P) W " - DELETED" Q
P1 I 'YSN,'$D(^YTD(601.2,P)),'$D(^YTD(601.4,P)) W !,"No data on this patient." S YSDFN=-1 Q
 S:'$D(^YTD(601.2,"B",P,P)) ^(P)="" Q
 Q
INC ;
 I $O(^YTD(601.4,P,1,0))>0 D:IOST?1"P".E HD:$Y+8>IOSL W ! W:YSN YSNM W ?31,"Incomplete Session(s) found"
 Q
DEL ;
 S YSD=0 W !!,"DELETE this ",X,"? " R A:DTIME S YSTOUT='$T,YSUOUT=A["^" Q:YSTOUT!YSUOUT  S A=$E(A) I "YyNn"'[A W:A'["?" " ?",$C(7) G DEL
 S:"Yy"[A YSD=1 Q
END ;
 I YSN L +^YTD(601.2,0) S $P(^YTD(601.2,0),U,3)=P1,$P(^(0),U,4)=P(0) L -^YTD(601.2,0) D KILL^%ZTLOAD
 W:'YSE !!,"NO ERRORS FOUND" W ! D:YSN ^%ZISC
KIL ;
 K %,%ZIS,%Y,A,C,D,H,I,IO("Q"),L,L1,P,P1,T,X,Y,YSAGE,YSD,YSDFN,YSDOB,YSL,YSN,YSNM,YSSEX,YSSSN,ZTSK Q
HD ;
 W @IOF,!,"Test/Interview Database Report on " S Y=DT D DT^YTAUDIT W !! Q
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HYTCHECK   4924     printed  Sep 23, 2025@19:53:12                                                                                                                                                                                                     Page 2
YTCHECK   ;SLC/TGA-CHECK PSYCH TEST/INTERVIEW DATA BASE ; 7/10/89  11:21 ;03/11/94 12:13
 +1       ;;5.01;MENTAL HEALTH;;Dec 30, 1994
 +2       ;
 +3       ; Called from the top by  MENU option YSMCHK
 +4       ;
S         ;
 +1        WRITE @IOF,?22,"Check Psych Test/Interview Data Base"
 +2        WRITE !!,"You may use this option for individual patients or all patients."
 +3        WRITE !,"If you use it for individual patients, you may elect to delete any unknown"
 +4        WRITE !,"tests/interviews and any tests/interviews with erroneous response sets."
 +5        WRITE !,"If you use it for all patients, you may elect to print a list of errors or"
 +6        WRITE !,"automatically delete all unknown patients, unknown instruments, and all"
 +7        WRITE !,"instruments with erroneous response sets."
 +8        WRITE !!,"THIS OPTION SHOULD NOT BE RUN WHILE TESTS/INTERVIEWS ARE UNDERWAY!",$CHAR(7)
1         ;
 +1        WRITE !!,"Check (I)ndividual patient or (A)ll patients:  I// "
           READ A:DTIME
           SET YSTOUT='$TEST
           SET YSUOUT=A["^"
           if YSTOUT!YSUOUT
               GOTO KIL
           SET A=$TRANSLATE($EXTRACT(A),"ia","IA")
 +2        IF "AI"'[A
               if A'["?"
                   WRITE " ?",$CHAR(7)
               WRITE !,"Type 'I' to check an individial patient's data or 'A' to check all patients."
               GOTO 1
 +3        SET YSN=$SELECT("I"[A:0,1:1)
           SET YSD=0
           SET YSE=0
           if 'YSN
               GOTO 2
 +4        READ !!,"(L)ist or (D)elete errors: ",A:DTIME
           SET YSTOUT='$TEST
           SET YSUOUT=A["^"
           if YSTOUT!YSUOUT
               GOTO KIL
           SET A=$TRANSLATE($EXTRACT(A),"ld","LD")
           IF "LD"'[A
               if A'["?"
                   WRITE " ?",$CHAR(7)
               GOTO S
 +5        SET YSD=$SELECT("D"[A:1,1:0)
2         ;
 +1        READ !!,"Shall I list discontinued session(s)"
           SET %=0
           DO YN^DICN
           if "^"[%Y
               GOTO KIL
           IF %Y["?"
               WRITE !?4,"Answer 'YES' or 'NO'."
               GOTO 2
 +2        SET YSL=$SELECT(%=1:1,1:0)
           IF 'YSN
               DO ^YSLRP
               if YSDFN<1
                   GOTO KIL
               SET P=YSDFN
               DO P1
               if YSDFN<1
                   GOTO KIL
               if YSL
                   DO INC
               DO T
               GOTO END
 +3        SET %ZIS="Q"
           DO ^%ZIS
           if POP
               GOTO KIL
           IF $DATA(IO("Q"))
               SET ZTRTN="ENP^YTCHECK"
               SET ZTSAVE("YS*")=""
               SET ZTDESC="YS DB CHECK"
               DO ^%ZTLOAD
               GOTO KIL
ENP       ;
 +1        USE IO
           DO HD
           SET (P,P(0))=0
           SET P1=""
           FOR 
               SET P=$ORDER(^YTD(601.2,P))
               if 'P
                   QUIT 
               DO P
               DO T
 +2        IF YSL
               SET P=0
               FOR 
                   SET P=$ORDER(^YTD(601.4,P))
                   if 'P
                       QUIT 
                   SET YSNM=$SELECT($DATA(^DPT(P,0)):$PIECE(^(0),U),1:"UNKNOWN PATIENT")
                   DO INC
 +3        GOTO END
CK        ;
 +1       ;G:'$D(^YTT(601,T,0)) CK1 S L=$P(^(0),U,11),L1=0 S:$G(^YTD(601.2,P,1,T,1,D,99))="MMPIR" L=1132 L +^YTD(601.2,P) S I=0 F  S I=$O(^YTD(601.2,P,1,T,1,D,I)) Q:'I!(I>50)  S L1=L1+$L(^(I))
 +2        if '$DATA(^YTT(601,T,0))
               GOTO CK1
 +3        SET L=$PIECE(^(0),U,11)
           SET L1=0
 +4        LOCK +^YTD(601.2,P)
           SET I=0
 +5        FOR 
               SET I=$ORDER(^YTD(601.2,P,1,T,1,D,I))
               if 'I!(I>50)
                   QUIT 
               SET L1=L1+$LENGTH(^(I))
 +6       ;
 +7       ; 3/10/94 LJA  Changes made to display MMPR correctly, when it is...
 +8        LOCK -^YTD(601.2,P)
 +9        IF L'=L1
               IF $$MMPIRCK(L,L1)
                   Begin DoDot:1
 +10                   SET YSE=YSE+1
                       if IOST?1"P".E
                           if $Y+9>IOSL
                               DO HD
                       WRITE !
                       if YSN
                           WRITE YSNM
 +11                   WRITE ?31,"Response set length error on "
                       SET X=$PIECE(^YTT(601,T,0),U)
 +12      ;  Following line commented on 4/29/94.  LJA.
 +13      ;I L'=L1,T=60,$G(^YTD(601.2,+P,1,+T,1,+D,99))="MMPIR" S X="MMPIR"
 +14      ;
 +15                   WRITE X,!?31,"expected ",L," got ",L1
 +16                   if 'YSN
                           DO DEL
 +17                   IF YSD
                           KILL ^YTD(601.2,+P,1,+T,1,+D)
                           WRITE " - DELETED"
                           QUIT 
                   End DoDot:1
CK1       ;
 +1        SET D(0)=D(0)+1
           SET C=D
 +2        QUIT 
 +3       ;
MMPIRCK(L,L1) ;  If MMPIR and EXP=566 and GOT=1132... OK
 +1       ;  This code "compensates" for MMPR longs (MMPIs) entered before
 +2       ;  YS*5*17.  These entries still have 1132 (2 x 566) responses...
 +3       ;
 +4       ;  Report 1 (ok) if anything other than an MMPIR
 +5       ;->
           IF $GET(^YTD(601.2,+P,1,+T,1,+D,99))'="MMPIR"
               QUIT 1
 +6       ;
 +7       ;  This is an MMPIR...
 +8        QUIT '(L=566&(L1=1132))
 +9       ;
D         ;
 +1        SET D(0)=0
           IF '$DATA(^YTT(601,T,0))
               SET YSE=YSE+1
               if IOST?1"P".E
                   if $Y+8>IOSL
                       DO HD
               WRITE !
               if YSN
                   WRITE YSNM
               WRITE ?31,"Unknown Instrument"
               SET X="instrument"
               if 'YSN
                   DO DEL
               IF YSD
                   KILL ^YTD(601.2,P,1,T),^YTD(601.2,P,1,"B",T)
                   WRITE " - DELETED"
                   QUIT 
 +2        SET D=0
           FOR 
               SET D=$ORDER(^YTD(601.2,P,1,T,1,D))
               if 'D
                   QUIT 
               DO CK
 +3        IF D(0)>0
               LOCK +^YTD(601.2,P,1,T,1,0)
               SET ^YTD(601.2,P,1,T,1,0)="^601.22DA^"_C_"^"_D(0)
               LOCK -^YTD(601.2,P,1,T,1,0)
               if '$DATA(^YTD(601.2,P,1,"B",T,T))
                   SET ^(T)=""
               QUIT 
 +4        KILL ^YTD(601.2,P,1,T)
           QUIT 
T         ;
 +1        SET (T(0),T)=0
           FOR 
               SET T=$ORDER(^YTD(601.2,P,1,T))
               if 'T
                   QUIT 
               DO D
               IF D(0)>0
                   SET T(0)=T(0)+1
                   SET H=T
                   if '$DATA(^YTD(601.2,P,1,"B",T,T))
                       SET ^(T)=""
 +2        IF T(0)>0
               LOCK +^YTD(601.2,P,1,0)
               SET ^YTD(601.2,P,1,0)="^601.21PA^"_H_"^"_T(0)
               LOCK -^YTD(601.2,P,1,0)
               if YSN
                   SET P(0)=P(0)+1
                   SET P1=P
 +3        IF T(0)>0
               SET I=0
               FOR 
                   SET I=$ORDER(^YTD(601.2,P,1,"B",I))
                   if 'I
                       QUIT 
                   if '$DATA(^YTD(601.2,P,1,I,0))
                       KILL ^YTD(601.2,P,1,"B",I)
 +4        if T(0)
               QUIT 
           KILL ^YTD(601.2,P),^YTD(601.2,"B",P)
           if YSN
               QUIT 
           LOCK +^YTD(601.2,0)
           SET X=$PIECE(^YTD(601.2,0),U,4)
           SET X=X-1
           if X<1
               SET X=0
           SET $PIECE(^(0),U,4)=X
           LOCK -^YTD(601.2,0)
           QUIT 
P         ;
 +1        SET YSDFN=P
           SET YSNM=$SELECT($DATA(^DPT(P,0)):$PIECE(^(0),U),1:"Unknown Patient")
           IF '$DATA(^DPT(P,0))
               SET YSE=YSE+1
               if IOST?1"P".E
                   if $Y+8>IOSL
                       DO HD
               WRITE !,"Unknown patient found"
               IF YSD
                   KILL ^YTD(601.2,P),^YTD(601.2,"B",P,P)
                   WRITE " - DELETED"
                   QUIT 
P1         IF 'YSN
               IF '$DATA(^YTD(601.2,P))
                   IF '$DATA(^YTD(601.4,P))
                       WRITE !,"No data on this patient."
                       SET YSDFN=-1
                       QUIT 
 +1        if '$DATA(^YTD(601.2,"B",P,P))
               SET ^(P)=""
           QUIT 
 +2        QUIT 
INC       ;
 +1        IF $ORDER(^YTD(601.4,P,1,0))>0
               if IOST?1"P".E
                   if $Y+8>IOSL
                       DO HD
               WRITE !
               if YSN
                   WRITE YSNM
               WRITE ?31,"Incomplete Session(s) found"
 +2        QUIT 
DEL       ;
 +1        SET YSD=0
           WRITE !!,"DELETE this ",X,"? "
           READ A:DTIME
           SET YSTOUT='$TEST
           SET YSUOUT=A["^"
           if YSTOUT!YSUOUT
               QUIT 
           SET A=$EXTRACT(A)
           IF "YyNn"'[A
               if A'["?"
                   WRITE " ?",$CHAR(7)
               GOTO DEL
 +2        if "Yy"[A
               SET YSD=1
           QUIT 
END       ;
 +1        IF YSN
               LOCK +^YTD(601.2,0)
               SET $PIECE(^YTD(601.2,0),U,3)=P1
               SET $PIECE(^(0),U,4)=P(0)
               LOCK -^YTD(601.2,0)
               DO KILL^%ZTLOAD
 +2        if 'YSE
               WRITE !!,"NO ERRORS FOUND"
           WRITE !
           if YSN
               DO ^%ZISC
KIL       ;
 +1        KILL %,%ZIS,%Y,A,C,D,H,I,IO("Q"),L,L1,P,P1,T,X,Y,YSAGE,YSD,YSDFN,YSDOB,YSL,YSN,YSNM,YSSEX,YSSSN,ZTSK
           QUIT 
HD        ;
 +1        WRITE @IOF,!,"Test/Interview Database Report on "
           SET Y=DT
           DO DT^YTAUDIT
           WRITE !!
           QUIT