LRVER ;DALOI/STAFF - LAB ROUTINE DATA VERIFICATION ;11/23/11 12:08
;;5.2;LAB SERVICE;**153,286,350**;Sep 27, 1994;Build 230
;
D ^LRPARAM
S LRCW=8,LREND=0,LRPANEL=0,LRUID=""
K DIC,LRPER,DUOUT
D REV
I LREND D QUIT Q
D VERDIS
I LREND D QUIT Q
D CMTDSP^LRVERA
S (LRAA,LRAD,LRAN)=0
N LRVBY
S LRVBY=$$GET^XPAR("USR^DIV^PKG","LR VER EM VERIFY BY UID",1,"Q")
I LRVBY<2 S LRVBY=$$SELBY^LRWU4("Verify by",LRVBY+1)
D:LRVBY=1 ^LRVERA D:LRVBY=2 UID^LRVERA
I 'LRVBY!(LRAA<1) D QUIT Q
S X=$$SELPL^LRVERA(DUZ(2))
I X<1 D QUIT Q
I X'=DUZ(2) N LRDUZ S LRDUZ(2)=X
I $P(LRPARAM,U,14),$P($G(^LRO(68,LRAA,0)),U,16) D ^LRCAPV G QUIT:$G(LREND)
SLOW S LRSS=$P(^LRO(68,LRAA,0),U,2)
;
I LRSS="MI" D Q
. S X=DUZ D DUZ^LRX S LRTEC=LRUSI
. S LRPTP=-1,LRMIDEF=$P(^LAB(69.9,1,1),U,10),LRMIOTH=$P(^(1),U,11)
. D ^LRMIEDZ2,END^LRMIEDZ,QUIT
;
;
I LRSS'="CH" D QUIT Q
;
; The rest of the code only works on the "CH" area.
DAT I LRAD<1 D ADATE^LRWU
Q:LRAD<1
S %H=$H-$P(^LAB(69.9,1,0),U,7) D YMD^%DTC S LRTM60=9999999-X
I LRAN>0 D WLN1 G QUIT:$G(LREND) G L11
I $P(^LRO(68,LRAA,0),U,3)="D" S I=0 F S I=$O(^LRO(68,LRAA,1,LRAD,1,I)) Q:I<1 I $D(^LRO(68,LRAA,1,LRAD,1,I,3)),'$P(^(3),U,4) S LRAN=I Q
S:$D(^LRO(68,LRAA,1,LRAD,2))&(LRAN<1) LRAN=$P(^(2),U,4)
;
L10 K LRTEST,LRSET,LRLDT,DIC,LRNAME,LRNG,LRDEL,T,LRTX,LRFP,LRAB,LRVERVER,Y,Z
G QUIT:$G(LREND) D WLN G QUIT:$G(LREND)
;
L11 I $D(LRFASTS) D ^LRVER1,SLOWK^LRFASTS Q
D ^LRVER1,NEXT
G L10
;
YN S DUOUT=0 S:'$D(%) %=1 D YN^DICN S:%<0 DUOUT=1 W:%=0 !,"Answer with a YES or NO or '^' to exit" Q:% G YN
;
WLN I LRVBY=2 S:LRAN<1 LRUID="" S:$L(LRAN) LRUID=$P($G(^LRO(68,LRAA,1,LRAD,1,LRAN,.3)),"^") D UID^LRVERA G LREND:LRUID="" G WLN1
;
S:LRAN<1 LRAN=""
K DIR,DIRUT,DTOUT,DUOUT
S DIR(0)="NAO^1:999999:0"
S DIR("A")="Accession NUMBER: ",DIR("?")="^D LW^LRVR"
I LRAN'="" S DIR("B")=LRAN
D ^DIR K DIR
I $D(DIRUT) G LREND
S LRAN=Y
G WLN:LRAN=""
WLN1 I '$D(^LRO(68,LRAA,1,LRAD,1,LRAN,0)) W !,"Accession does not exist." D NEXT G WLN
S LRDFN=+^LRO(68,LRAA,1,LRAD,1,LRAN,0),LRORD=$S($D(^(.1)):^(.1),1:0),LRODT=+$S($P(^(0),U,4):$P(^(0),U,4),1:$P(^(0),U,3)),LRSN=+$P(^(0),U,5)
S LRUID=$P($G(^LRO(68,LRAA,1,LRAD,1,LRAN,.3)),"^")
S LRDPF=$P(^LR(LRDFN,0),U,2),DFN=$P(^(0),U,3) D PT^LRX
W !,PNM,?30,SSN
W:LRDPF=2 " LOC:",$S($L(LRWRD):LRWRD,1:$S($L($P(^LRO(68,LRAA,1,LRAD,1,LRAN,0),U,7)):$P(^(0),U,7),1:"??"))
W !
S LRCDT=$P($G(^LRO(68,LRAA,1,LRAD,1,LRAN,3)),U)
; If no lab arrival time then have user update order/accession
I '$P($G(^LRO(68,LRAA,1,LRAD,1,LRAN,3)),U,3) D
. N %DT,LRA1,LRA2,LRA3
. S %DT("B")=$$FMTE^XLFDT(LRCDT,"1")
. S LRSTATUS="C",LRA1=LRAA,LRA2=LRAD,LRA3=LRAN
. D P15^LROE1
. S LRAA=LRA1,LRAD=LRA2,LRAN=LRA3
. Q:LRCDT<1
. I '$P($G(^LRO(68,LRAA,1,LRAD,1,LRAN,3)),U,3) S $P(^(3),U,3)=$$NOW^XLFDT
; If user did not update then go to next accession
I '$P($G(^LRO(68,LRAA,1,LRAD,1,LRAN,3)),U,3) D NEXT G WLN
S LRCDT=$P($G(^LRO(68,LRAA,1,LRAD,1,LRAN,3)),U)
I $G(LRCDT)<1 S LRCDT=1 D NEXT G WLN
; Check for valid pointer to file #63 and entry in file #63.
S LRIDT=$P($G(^LRO(68,LRAA,1,LRAD,1,LRAN,3)),U,5)
I LRIDT<1 D G WLN
. W !,">>>>ERROR - NO POINTER TO FILE #63 - PLEASE NOTIFY SYSTEM MANAGER<<<<<",!
. D NEXT
I '$D(^LR(LRDFN,"CH",LRIDT,0)) D G WLN
. W !,">>>>ERROR - NO ENTRY IN FILE #63 - PLEASE NOTIFY SYSTEM MANAGER<<<<<",!
. D NEXT
I $D(^LRO(69,LRODT,1,LRSN)),'$D(^(LRSN,1)) W !,"This Order # has not been collected",$C(7) D NEXT G WLN
I $D(^LRO(69,LRODT,1,LRSN,1)),$P(^LRO(69,LRODT,1,LRSN,1),U,4)'="C" W !,"You cannot verify an accession which has not been collected.",$C(7) D NEXT G WLN
Q
;
;
LREND I $D(^LRO(68,LRAA,1,LRAD,0)) S:'$D(^(2)) ^(2)="^^" S ^(2)=$P(^(2),U,1,3)_U_LRAN_U_$P(^(2),U,5,99)
S LREND=1 K ^TMP("LR",$J,"TMP"),LRORD,LRM
Q
;
;
NEXT ;
S LRAN=$O(^LRO(68,LRAA,1,LRAD,1,LRAN))
I LRAN<1 W !,"LAST IN WORK LIST" S LRAN="",LREND=1
Q
;
;
QUIT ;
I $D(LRCSQ),'$O(^XTMP("LRCAP",LRCSQ,DUZ,0)) K ^XTMP("LRCAP",LRCSQ,DUZ),LRCSQ
I $D(LRCSQ),$D(LRAA),$P($G(^LRO(68,+LRAA,0)),U,16) D STD^LRCAPV
;
SLOQ ;
D STOP^LRCAPV,^LRCAPV2
K %,A,AGE,D1,DFN,DIC,DIE,DIR,DL,DLAYGO,DOB,DQ,DR,DX,I,J,LRACC,LRVF,LRCDT,LRCW,LRDAT,LRDFN,LRDPF,LRDV,LRDVF,LREAL,LREDIT,LREND,LRFLG,LRIDT,LRINI,LRLCT,LRLLOC,LRMETH,LRNG2,LRNG3,LRAD,LRAN,LRSPEC,LRPER,LRALL
K LRNG4,LRNG5,LRNT,LRNTN,LRNX,LRODT,LROUTINE,LROWLE,LRSAMP,LRSN,LRSS,LRSSP,LRSUB,LRTEC,LRTN,LRTS,LRUSI,LRUSNM,LRWRD,LRXD,LRXDP,PNM,S,SEX,SSN,X,X1,X2,X3,Y,Z
K %DT,%H,%X,%Y,B,C,D,DA,DR,G,G1,G2,G4,LRACD,LRAOD,LREDT,LREXEC,LRGVP,LRIOZERO,LRM,LRMA,LRNAME,LRORD,LRPLOC,LRSA,LRSB,LRSDT,LRSSQ,LRTK,LRTX,LRURG,LRVOL,LRVRM,LRWDTL,LRXDH,N,POP,T1,X9,Z1,Z2,^TMP("LR",$J)
K LRT,LRCFL,D0,GLB,LRAA,LRCNT,LRCODE,LRCODEN,LRCMTDSP,LRCWT,LRI,LRNOW,LRP,LRPN,LRQC,LRSSC,LRSSCX,LRSTD,NODE,NODE0,NOW,S2,ZTSK,Y,LRTIME,LRMAX2,LRMAXX,LRMX,LRODTSV,LRSNSV,LRSPN,LRTNSV,LRTY
K W,Y,Z,Z1,Z2,I1,LRALERT,LRDIYCNT,LRNOCODE,LRREP,LRSTATUS,LRUN,LRX,LRTIM,LRAL,LRPANEL,LRTM60,LRNDISP
D KVA^VADPT K LRIDIV,LROLLOC,LRORIFN,LRPRAC,LRRB,LRSD,LRTREA,LRTT,LRUID
K NAME,LRSUFO,LRCSQQ
Q
;
;
REV ; Ask if user wants to review data before and after editing
N DIR,DIROUT,DIRUT,DTOUT,DUOUT,X,Y
S DIR(0)="YO",DIR("B")="YES"
S DIR("A")="Do you want to review the data before and after you edit"
S DIR("?",1)="Answer YES, and the data will be displayed in its entirety as a panel before"
S DIR("?",2)="you edit if data already exists, and will be displayed after you edit."
S DIR("?")="NO, will skip the extra displays."
D ^DIR
I $D(DIRUT) S LREND=1
I Y=0 S LRPER=""
Q
;
;
VERDIS ; Prevent test not selected by the user with verified data
; entered from being displayed on the editing screens.
N DIR,DIROUT,DIRUT,DTOUT,DUOUT,X,Y
S DIR(0)="YO",DIR("B")="NO"
S DIR("A")="Do you wish to see all previously verified results"
S DIR("?",1)="Do you want to see every test that has results entered"
S DIR("?",2)="or only the test(s) you select to edit "
S DIR("?")="Answer with YES or NO"
D ^DIR
I $D(DIRUT) S LREND=1
I Y=0 S LRNDISP=1
Q
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HLRVER 6108 printed Oct 16, 2024@18:23:12 Page 2
LRVER ;DALOI/STAFF - LAB ROUTINE DATA VERIFICATION ;11/23/11 12:08
+1 ;;5.2;LAB SERVICE;**153,286,350**;Sep 27, 1994;Build 230
+2 ;
+3 DO ^LRPARAM
+4 SET LRCW=8
SET LREND=0
SET LRPANEL=0
SET LRUID=""
+5 KILL DIC,LRPER,DUOUT
+6 DO REV
+7 IF LREND
DO QUIT
QUIT
+8 DO VERDIS
+9 IF LREND
DO QUIT
QUIT
+10 DO CMTDSP^LRVERA
+11 SET (LRAA,LRAD,LRAN)=0
+12 NEW LRVBY
+13 SET LRVBY=$$GET^XPAR("USR^DIV^PKG","LR VER EM VERIFY BY UID",1,"Q")
+14 IF LRVBY<2
SET LRVBY=$$SELBY^LRWU4("Verify by",LRVBY+1)
+15 if LRVBY=1
DO ^LRVERA
if LRVBY=2
DO UID^LRVERA
+16 IF 'LRVBY!(LRAA<1)
DO QUIT
QUIT
+17 SET X=$$SELPL^LRVERA(DUZ(2))
+18 IF X<1
DO QUIT
QUIT
+19 IF X'=DUZ(2)
NEW LRDUZ
SET LRDUZ(2)=X
+20 IF $PIECE(LRPARAM,U,14)
IF $PIECE($GET(^LRO(68,LRAA,0)),U,16)
DO ^LRCAPV
if $GET(LREND)
GOTO QUIT
SLOW SET LRSS=$PIECE(^LRO(68,LRAA,0),U,2)
+1 ;
+2 IF LRSS="MI"
Begin DoDot:1
+3 SET X=DUZ
DO DUZ^LRX
SET LRTEC=LRUSI
+4 SET LRPTP=-1
SET LRMIDEF=$PIECE(^LAB(69.9,1,1),U,10)
SET LRMIOTH=$PIECE(^(1),U,11)
+5 DO ^LRMIEDZ2
DO END^LRMIEDZ
DO QUIT
End DoDot:1
QUIT
+6 ;
+7 ;
+8 IF LRSS'="CH"
DO QUIT
QUIT
+9 ;
+10 ; The rest of the code only works on the "CH" area.
DAT IF LRAD<1
DO ADATE^LRWU
+1 if LRAD<1
QUIT
+2 SET %H=$HOROLOG-$PIECE(^LAB(69.9,1,0),U,7)
DO YMD^%DTC
SET LRTM60=9999999-X
+3 IF LRAN>0
DO WLN1
if $GET(LREND)
GOTO QUIT
GOTO L11
+4 IF $PIECE(^LRO(68,LRAA,0),U,3)="D"
SET I=0
FOR
SET I=$ORDER(^LRO(68,LRAA,1,LRAD,1,I))
if I<1
QUIT
IF $DATA(^LRO(68,LRAA,1,LRAD,1,I,3))
IF '$PIECE(^(3),U,4)
SET LRAN=I
QUIT
+5 if $DATA(^LRO(68,LRAA,1,LRAD,2))&(LRAN<1)
SET LRAN=$PIECE(^(2),U,4)
+6 ;
L10 KILL LRTEST,LRSET,LRLDT,DIC,LRNAME,LRNG,LRDEL,T,LRTX,LRFP,LRAB,LRVERVER,Y,Z
+1 if $GET(LREND)
GOTO QUIT
DO WLN
if $GET(LREND)
GOTO QUIT
+2 ;
L11 IF $DATA(LRFASTS)
DO ^LRVER1
DO SLOWK^LRFASTS
QUIT
+1 DO ^LRVER1
DO NEXT
+2 GOTO L10
+3 ;
YN SET DUOUT=0
if '$DATA(%)
SET %=1
DO YN^DICN
if %<0
SET DUOUT=1
if %=0
WRITE !,"Answer with a YES or NO or '^' to exit"
if %
QUIT
GOTO YN
+1 ;
WLN IF LRVBY=2
if LRAN<1
SET LRUID=""
if $LENGTH(LRAN)
SET LRUID=$PIECE($GET(^LRO(68,LRAA,1,LRAD,1,LRAN,.3)),"^")
DO UID^LRVERA
if LRUID=""
GOTO LREND
GOTO WLN1
+1 ;
+2 if LRAN<1
SET LRAN=""
+3 KILL DIR,DIRUT,DTOUT,DUOUT
+4 SET DIR(0)="NAO^1:999999:0"
+5 SET DIR("A")="Accession NUMBER: "
SET DIR("?")="^D LW^LRVR"
+6 IF LRAN'=""
SET DIR("B")=LRAN
+7 DO ^DIR
KILL DIR
+8 IF $DATA(DIRUT)
GOTO LREND
+9 SET LRAN=Y
+10 if LRAN=""
GOTO WLN
WLN1 IF '$DATA(^LRO(68,LRAA,1,LRAD,1,LRAN,0))
WRITE !,"Accession does not exist."
DO NEXT
GOTO WLN
+1 SET LRDFN=+^LRO(68,LRAA,1,LRAD,1,LRAN,0)
SET LRORD=$SELECT($DATA(^(.1)):^(.1),1:0)
SET LRODT=+$SELECT($PIECE(^(0),U,4):$PIECE(^(0),U,4),1:$PIECE(^(0),U,3))
SET LRSN=+$PIECE(^(0),U,5)
+2 SET LRUID=$PIECE($GET(^LRO(68,LRAA,1,LRAD,1,LRAN,.3)),"^")
+3 SET LRDPF=$PIECE(^LR(LRDFN,0),U,2)
SET DFN=$PIECE(^(0),U,3)
DO PT^LRX
+4 WRITE !,PNM,?30,SSN
+5 if LRDPF=2
WRITE " LOC:",$SELECT($LENGTH(LRWRD):LRWRD,1:$SELECT($LENGTH($PIECE(^LRO(68,LRAA,1,LRAD,1,LRAN,0),U,7)):$PIECE(^(0),U,7),1:"??"))
+6 WRITE !
+7 SET LRCDT=$PIECE($GET(^LRO(68,LRAA,1,LRAD,1,LRAN,3)),U)
+8 ; If no lab arrival time then have user update order/accession
+9 IF '$PIECE($GET(^LRO(68,LRAA,1,LRAD,1,LRAN,3)),U,3)
Begin DoDot:1
+10 NEW %DT,LRA1,LRA2,LRA3
+11 SET %DT("B")=$$FMTE^XLFDT(LRCDT,"1")
+12 SET LRSTATUS="C"
SET LRA1=LRAA
SET LRA2=LRAD
SET LRA3=LRAN
+13 DO P15^LROE1
+14 SET LRAA=LRA1
SET LRAD=LRA2
SET LRAN=LRA3
+15 if LRCDT<1
QUIT
+16 IF '$PIECE($GET(^LRO(68,LRAA,1,LRAD,1,LRAN,3)),U,3)
SET $PIECE(^(3),U,3)=$$NOW^XLFDT
End DoDot:1
+17 ; If user did not update then go to next accession
+18 IF '$PIECE($GET(^LRO(68,LRAA,1,LRAD,1,LRAN,3)),U,3)
DO NEXT
GOTO WLN
+19 SET LRCDT=$PIECE($GET(^LRO(68,LRAA,1,LRAD,1,LRAN,3)),U)
+20 IF $GET(LRCDT)<1
SET LRCDT=1
DO NEXT
GOTO WLN
+21 ; Check for valid pointer to file #63 and entry in file #63.
+22 SET LRIDT=$PIECE($GET(^LRO(68,LRAA,1,LRAD,1,LRAN,3)),U,5)
+23 IF LRIDT<1
Begin DoDot:1
+24 WRITE !,">>>>ERROR - NO POINTER TO FILE #63 - PLEASE NOTIFY SYSTEM MANAGER<<<<<",!
+25 DO NEXT
End DoDot:1
GOTO WLN
+26 IF '$DATA(^LR(LRDFN,"CH",LRIDT,0))
Begin DoDot:1
+27 WRITE !,">>>>ERROR - NO ENTRY IN FILE #63 - PLEASE NOTIFY SYSTEM MANAGER<<<<<",!
+28 DO NEXT
End DoDot:1
GOTO WLN
+29 IF $DATA(^LRO(69,LRODT,1,LRSN))
IF '$DATA(^(LRSN,1))
WRITE !,"This Order # has not been collected",$CHAR(7)
DO NEXT
GOTO WLN
+30 IF $DATA(^LRO(69,LRODT,1,LRSN,1))
IF $PIECE(^LRO(69,LRODT,1,LRSN,1),U,4)'="C"
WRITE !,"You cannot verify an accession which has not been collected.",$CHAR(7)
DO NEXT
GOTO WLN
+31 QUIT
+32 ;
+33 ;
LREND IF $DATA(^LRO(68,LRAA,1,LRAD,0))
if '$DATA(^(2))
SET ^(2)="^^"
SET ^(2)=$PIECE(^(2),U,1,3)_U_LRAN_U_$PIECE(^(2),U,5,99)
+1 SET LREND=1
KILL ^TMP("LR",$JOB,"TMP"),LRORD,LRM
+2 QUIT
+3 ;
+4 ;
NEXT ;
+1 SET LRAN=$ORDER(^LRO(68,LRAA,1,LRAD,1,LRAN))
+2 IF LRAN<1
WRITE !,"LAST IN WORK LIST"
SET LRAN=""
SET LREND=1
+3 QUIT
+4 ;
+5 ;
QUIT ;
+1 IF $DATA(LRCSQ)
IF '$ORDER(^XTMP("LRCAP",LRCSQ,DUZ,0))
KILL ^XTMP("LRCAP",LRCSQ,DUZ),LRCSQ
+2 IF $DATA(LRCSQ)
IF $DATA(LRAA)
IF $PIECE($GET(^LRO(68,+LRAA,0)),U,16)
DO STD^LRCAPV
+3 ;
SLOQ ;
+1 DO STOP^LRCAPV
DO ^LRCAPV2
+2 KILL %,A,AGE,D1,DFN,DIC,DIE,DIR,DL,DLAYGO,DOB,DQ,DR,DX,I,J,LRACC,LRVF,LRCDT,LRCW,LRDAT,LRDFN,LRDPF,LRDV,LRDVF,LREAL,LREDIT,LREND,LRFLG,LRIDT,LRINI,LRLCT,LRLLOC,LRMETH,LRNG2,LRNG3,LRAD,LRAN,LRSPEC,LRPER,LRALL
+3 KILL LRNG4,LRNG5,LRNT,LRNTN,LRNX,LRODT,LROUTINE,LROWLE,LRSAMP,LRSN,LRSS,LRSSP,LRSUB,LRTEC,LRTN,LRTS,LRUSI,LRUSNM,LRWRD,LRXD,LRXDP,PNM,S,SEX,SSN,X,X1,X2,X3,Y,Z
+4 KILL %DT,%H,%X,%Y,B,C,D,DA,DR,G,G1,G2,G4,LRACD,LRAOD,LREDT,LREXEC,LRGVP,LRIOZERO,LRM,LRMA,LRNAME,LRORD,LRPLOC,LRSA,LRSB,LRSDT,LRSSQ,LRTK,LRTX,LRURG,LRVOL,LRVRM,LRWDTL,LRXDH,N,POP,T1,X9,Z1,Z2,^TMP("LR",$JOB)
+5 KILL LRT,LRCFL,D0,GLB,LRAA,LRCNT,LRCODE,LRCODEN,LRCMTDSP,LRCWT,LRI,LRNOW,LRP,LRPN,LRQC,LRSSC,LRSSCX,LRSTD,NODE,NODE0,NOW,S2,ZTSK,Y,LRTIME,LRMAX2,LRMAXX,LRMX,LRODTSV,LRSNSV,LRSPN,LRTNSV,LRTY
+6 KILL W,Y,Z,Z1,Z2,I1,LRALERT,LRDIYCNT,LRNOCODE,LRREP,LRSTATUS,LRUN,LRX,LRTIM,LRAL,LRPANEL,LRTM60,LRNDISP
+7 DO KVA^VADPT
KILL LRIDIV,LROLLOC,LRORIFN,LRPRAC,LRRB,LRSD,LRTREA,LRTT,LRUID
+8 KILL NAME,LRSUFO,LRCSQQ
+9 QUIT
+10 ;
+11 ;
REV ; Ask if user wants to review data before and after editing
+1 NEW DIR,DIROUT,DIRUT,DTOUT,DUOUT,X,Y
+2 SET DIR(0)="YO"
SET DIR("B")="YES"
+3 SET DIR("A")="Do you want to review the data before and after you edit"
+4 SET DIR("?",1)="Answer YES, and the data will be displayed in its entirety as a panel before"
+5 SET DIR("?",2)="you edit if data already exists, and will be displayed after you edit."
+6 SET DIR("?")="NO, will skip the extra displays."
+7 DO ^DIR
+8 IF $DATA(DIRUT)
SET LREND=1
+9 IF Y=0
SET LRPER=""
+10 QUIT
+11 ;
+12 ;
VERDIS ; Prevent test not selected by the user with verified data
+1 ; entered from being displayed on the editing screens.
+2 NEW DIR,DIROUT,DIRUT,DTOUT,DUOUT,X,Y
+3 SET DIR(0)="YO"
SET DIR("B")="NO"
+4 SET DIR("A")="Do you wish to see all previously verified results"
+5 SET DIR("?",1)="Do you want to see every test that has results entered"
+6 SET DIR("?",2)="or only the test(s) you select to edit "
+7 SET DIR("?")="Answer with YES or NO"
+8 DO ^DIR
+9 IF $DATA(DIRUT)
SET LREND=1
+10 IF Y=0
SET LRNDISP=1
+11 QUIT