- DPTLK1 ;ALB/RMO,EG - MAS Patient Look-up Check Cross-References ; 08/15/2006
- ;;5.3;Registration;**32,50,197,249,317,391,244,532,574,620,641,680,538,657,1015**;Aug 13, 1993;Build 21
- FIND ;Cross reference patient lookup
- ;Optional input: DPTNOFZY='1' to suppress fuzzy lookups implemented
- ; by patch DG*5.3*244
- ;
- N DDCOMA,DPTXOLD,DPTOUT,DPTOVAL,DGLASTLK
- S DGLASTLK=1
- S (DPTXOLD,DPTX)=$$UCASE(DPTX)
- I DPTX?1A.E1","1.A.E S DPTXOLD=DPTX,DDCOMA="I $E($P($G(DPTVAL),"","",2),1,"_$L($P(DPTX,",",2))_")="""_$TR($P(DPTX,",",2),"""")_"""",DPTX=$P(DPTX,",")
- K DPTREFS S DPTREFS=$S(DIC(0)'["M":"B,NOP",DPTX?1A1N.N:$S($L(DPTX)<6:"BS5,CN,RM",1:"CN,RM"),DPTX?4N!(DPTX?4N1A):"BS,SSN,CN,RM",DPTX?9N.E:"SSN,CN,RM",1:"")
- S:DPTREFS="" DPTREFS=$S(DPTX?1N.N:$S($L(DPTX)<5:"CN,RM,BS,SSN",1:"CN,RM,SSN"),DPTX?1N.E:"CN,RM",1:"B,NOP,CN,RM") S:$D(DPTIX) DPTREFS=DPTIX_","_DPTREFS
- ;Use cross reference passed to LIST^DPTLK1 by Person Service Lookup (DPTPSREF) if defined.
- I $G(DPTPSREF)'="" S DPTREFS=DPTPSREF
- S DPTBEG=1,(DPTDFN,DPTNUM,DPTOUT)=0
- F DPTLP=1:1 S DPTREF=$P(DPTREFS,",",DPTLP) Q:DPTREF=""!(DPTDFN) D Q:DPTDFN!DPTOUT
- .S DPTVAL=DPTX
- .I DPTREF="NOP",'$G(DPTNOFZY) S DPTVAL=$$FORMAT^XLFNAME7(DPTVAL,2,30,1,0,,1) Q:'$L(DPTVAL)
- .D LOOK(DPTVAL)
- .I DPTREF="B",'$G(DPTNOFZY) S DPTVAL=$$FORMAT^XLFNAME7(DPTX,2,30,1,0,,1) D:DPTVAL'=DPTX LOOK(DPTVAL)
- .Q
- SET I 'DPTDFN S:DPTCNT=1&($D(DPTIFNS(DPTCNT))) DPTDFN=+DPTIFNS(DPTCNT) S DPT("NOPRT^")="" D PRTDPT:'DPTDFN&(DPTCNT>DPTNUM)&(DIC(0)["E") K DPT("NOPRT^") I 'DPTDFN,$D(DPTSEL),DPTSEL="" S DPTX="",DPTDFN=-1
- I DPTDFN'>0,$L($G(DPTXOLD)) I DPTX=$P(DPTXOLD,",") S DPTX=DPTXOLD
- I DPTDFN>0,$D(DPTXOLD) S DPTX=DPTXOLD
- ; one last stab at lookup - DG*641
- I '$G(DPTCNT),DPTX[",",DGLASTLK=1,'$G(DPTNOFZY) D
- .S DPTX=$$FORMAT^XLFNAME7(DPTX,2,30,1)
- .S DDCOMA="I $E($P($G(DPTVAL),"","",2),1,"_$L($P(DPTX,",",2))_")="""_$TR($P(DPTX,",",2),"""")_""""
- .S DPTX=$P(DPTX,",")
- .S DGLASTLK=0
- .S DPTREFS="B,NOP,CN,RM"
- .;Person Service Lookup does not allow lookup by RM cross reference
- .;PSL release 4 does not allow lookup by ward (CN) cross reference
- .I $G(DPTPSREF)'="" S DPTREFS="B,NOP"
- .F DPTLP=1:1 S DPTREF=$P(DPTREFS,",",DPTLP) Q:DPTREF=""!(DPTDFN) D Q:DPTDFN!DPTOUT
- ..S DPTVAL=DPTX
- ..D LOOK(DPTVAL)
- I DGLASTLK=0,$G(DPTCNT) S DGLASTLK=1 G SET
- I DGLASTLK=0,'$G(DPTCNT),$L($G(DPTXOLD)) S DPTX=DPTXOLD
- ; end of DG*641 change
- ;
- Q K DPTBEG,DPTIFN,DPTIFNS,DPTLP,DPTLP1,DPTNUM,DPTREF,DPTREFS,DPTVAL
- K DPTOVAL,DPTOUT,DPTXOLD,^TMP("DPTLK",$J)
- Q
- ;
- LOOK(DPTVAL) ;Look for x-ref matches
- ;Input: DPTVAL=lookup seed value
- I $L(DPTVAL),$D(^DPT(DPTREF,DPTVAL)) D CHKIFN Q:DPTDFN!DPTOUT
- I $L(DPTVAL),'($D(^DPT(DPTREF,DPTVAL))&(DIC(0)["O"))&(DIC(0)'["X") D CHKVAL
- Q
- ;
- CHKVAL S DPTOVAL=DPTVAL
- N DPTSEED S DPTSEED=DPTVAL
- I DPTREF="SSN",(DPTVAL?9N1"p") D Q
- .S DPTVAL=$E(DPTVAL,1,9)_"P" D CHKIFN
- .Q
- I DPTREF="SSN",(DPTVAL?2.9N) D Q
- .S DPTVAL=$E(DPTVAL_"0000000",1,9)
- .D CV1(DPTVAL),CHKIFN
- .S DPTVAL=DPTVAL_"P" D CV1(DPTVAL),CHKIFN
- .Q
- D CV1(DPTVAL)
- I DPTREF="CN"!(DPTREF="RM"),DPTVAL'["E",DPTVAL=+DPTVAL,'$D(^DPT(DPTREF,DPTVAL)) D Q
- .S DPTVAL=$O(^DPT(DPTREF,DPTVAL_" "),-1)
- .D CV1(DPTVAL)
- .Q
- Q
- ;
- CV1(DPTVAL) ;Look for input value matches
- I $L(DPTVAL) F DPTLP1=0:0 S DPTVAL=$O(^DPT(DPTREF,DPTVAL)) Q:DPTVAL=""!(DPTDFN)!($P(DPTVAL,DPTSEED)'="") D CHKIFN
- Q
- ;
- CHKIFN F DPTIFN=0:0 S DPTIFN=$O(^DPT(DPTREF,DPTVAL,DPTIFN)) Q:'DPTIFN!(DPTDFN)!DPTOUT S Y=DPTIFN D SETDPT I $S<DPTSZ F I=1:1:DPTNUM-7 S J=$S($D(DPTIFNS(I)):+DPTIFNS(I),1:0) K DPTIFNS(I),DPTS(J) S DPTBEG=I
- Q
- ;
- SETDPT Q:($D(DPTS(Y))&($G(DPTREF)'="B"))!'$D(^DPT(Y,0))
- ; screen out MERGED FROM records - DG/574
- Q:$D(^DPT(Y,-9))
- N DPTNVAL I '$D(DPTOVAL) N DPTOVAL S DPTOVAL=DPTX
- I 1 S X=DPTOVAL X:$D(DIC("S")) DIC("S") Q:'$T X:($D(DO("SCR"))) DO("SCR") Q:'$T X:$D(DDCOMA) DDCOMA Q:'$T
- K:$G(DPTCNT)<1 ^TMP("DPTLK",$J)
- S DPTS(Y)=$S('$D(DPTREF):$P(^DPT(Y,0),U),1:$P(^DPT(Y,0),U))_U_$S($D(DPTVAL):$E(DPTVAL,($L(DPTOVAL)+1),$L(DPTVAL)),1:"")
- S DPTNVAL=$P(^DPT(Y,0),U)_U_$S($G(DPTREF)="NOP":$P(^DPT(Y,0),U),$D(DPTVAL):DPTVAL,1:"")
- Q:$D(^TMP("DPTLK",$J,Y,DPTNVAL))
- S DPTCNT=DPTCNT+1,^TMP("DPTLK",$J,Y,DPTNVAL)="",DPTIFNS(DPTCNT)=Y_U_DPTNVAL
- I $D(DPTLARR) D Q
- .I DPTLMAX,DPTCNT>DPTLMAX D Q
- ..S @DPTLARR@(DPTCNT)="ADDITIONAL MATCHES FOUND BUT NOT RETURNED"
- ..S DPTOUT=1
- ..Q
- .S @DPTLARR@(DPTCNT)=DPTIFNS(DPTCNT)_U_$$SSN(Y)_U_$$DOB(Y)
- .Q
- I '(DPTCNT#5),DIC(0)["E" D PRTDPT
- Q
- ;
- PRTDPT I $D(DDS) D CLRMSG^DDS S DX=0,DY=DDSHBX+1 X DDXY S X=0 X ^%ZOSF("RM")
- N DPTP1,DPTP2
- F DPTNUM=DPTNUM+1:1:DPTCNT Q:DPTOUT S DPTIFN=+DPTIFNS(DPTNUM) D
- .W:'$D(DDS) !
- .S DPTP2=$P(DPTIFNS(DPTNUM),U,3)
- .S DPTP1=$P(DPTIFNS(DPTNUM),U,2)
- .W ?3,DPTNUM,?$X+(4-$L(DPTNUM))
- .; write the xref value
- .W DPTP2_" "
- .; write patient name if diff than xref value
- .I DPTP1'=DPTP2 W DPTP1
- .S Y=DPTIFN X:$D(^DPT(DPTIFN,0)) "N DDS X DIC(""W"")" I $D(DDS) S DY=DY+1,DX=0 X DDXY S $X=0
- I '$D(DPT("NOPRT^")) W:'$D(DDS) ! W "ENTER '^' TO STOP, OR "
- W:'$D(DDS) ! W "CHOOSE ",DPTBEG,"-",DPTNUM,": " R X:DTIME S DPTSEL=X D Q:DPTSEL=""!$D(DTOUT)!$D(DUOUT)
- .S:'$T DPTSEL=$S($D(DPTOVAL):DPTOVAL,$D(DPTVAL):DPTVAL,$D(DPTX):DPTX,$D(DPTXOLD):DPTXOLD,1:""),(DPTOUT,DTOUT)=1
- .S:X="^" (DPTOUT,DUOUT)=1
- S DPTDFN=$S(DPTSEL'?.ANP!($L(DPTSEL)>30):-1,'$D(DPTIFNS(DPTSEL)):-1,$D(DPTS(+DPTIFNS(DPTSEL))):+DPTIFNS(DPTSEL),1:-1),DPTX=$S(DPTDFN<0:DPTSEL,1:DPTX)
- S:DPTDFN=-1 DPTXOLD=DPTSEL
- Q
- ;
- LIST(DPTX,DPTLMAX,DPTLARR) ;Silent lookup list
- ;Input: DPTX=lookup value (name, SSN, room, ward, DFN or
- ; "space_return").
- ; DPTLMAX=maximum number of matches to return (optional), this
- ; parameter has no effect if DFN or "space_return"
- ; lookup methods are used.
- ; DPTLARR=name of array to return list of matches, this should
- ; be a global if DPTLMAX is a large value or unspecified
- ; This array is returned in the format:
- ; @DPTLARR@(n)=DFN^patient_name^xref_lookup_match_value^
- ; SSN^Date_of_Birth
- ; If more matches exist than the maximum to be returned
- ; as specified by DPTLMAX, the @DPTLARR@(DPTLMAX+1) node
- ; will be defined = "ADDITIONAL MATCHES FOUND BUT NOT
- ; RETURNED".
- ; The calling program has the responsibility to kill
- ; @DPTLARR prior to calling this entry point.
- ;Output: number of matches and array named by DPTLARR.
- ;
- N X,Y,DPTCNT,DIC,DPTSZ,DPTDFN,DPTIFNS,DPTS
- S DPTCNT=0,DIC(0)="M",DPTSZ=1000 S:$G(DPTLMAX)<1 DPTLMAX=0
- ;Check for "space_return" or DFN lookup
- I DPTX=" "!($E(DPTX)="`") D Q DPTCNT
- .I DPTX=" " S Y=$S('($D(DUZ)#2):-1,$D(^DISV(DUZ,"^DPT(")):^("^DPT("),1:-1)
- .I $E(DPTX)="`" S Y=$S($D(^DPT(+$P(DPTX,"`",2),0)):+$P(DPTX,"`",2),1:-1)
- .Q:Y<1 Q:'$D(^DPT(Y,0)) D SETDPT S DPTCNT=1
- .Q
- D FIND
- Q $S(DPTLMAX&(DPTCNT>DPTLMAX):DPTLMAX,1:DPTCNT)
- ;
- UCASE(DGX) ;Uppercase lookup value
- ;Input: DGX=lookup value
- ;Output: transformed DGX
- N DGI,DGY,DGZ S DGZ=DGX,DGX=""
- F DGI=1:1:$L(DGZ) S DGY=$E(DGZ,DGI) D
- .S:DGY?1L DGY=$C($A(DGY)-32)
- .S DGX=DGX_DGY
- Q DGX
- ;
- SSN(DFN) ;do not show ssn identifier for patient
- ; input DFN = ien in file #2 [required]
- ; output SSN = nnnnnnnnn
- ;
- N SSN
- S SSN="",DFN=+DFN
- I DFN>0 D
- .I $$SCREEN(DFN) S SSN="*SENSITIVE*" Q
- .S SSN=$P($G(^DPT(DFN,0)),U,9)
- .; DG*5.3*657 BAJ 11/20 2005
- .; display Pseudo SSN alert on list
- .I SSN?9N1"P" S SSN=SSN_" **Pseudo SSN**"
- .Q
- Q SSN
- ;
- DOB(DFN,DGYR) ;do not show dob identifier for patient
- ; input DFN = ien in file #2 [required]
- ; DGYR = 0/1 [optional]
- ; where 0 returns 4-digit year (default)
- ; 1 returns 2-digit year
- ; 2 returns File manager date
- ; output DOB = mm/dd/yyyy (default)
- ; = mm/dd/yy, if DGYR=1
- ; = yyymmdd, if DGYR=2
- N B,DOB,YEAR
- S DOB="",DFN=+DFN,DGYR=+$G(DGYR)
- I DFN>0 D
- .I $$SCREEN(DFN) S DOB="*SENSITIVE*" Q
- .S B=$P($G(^DPT(DFN,0)),U,3)
- .I DGYR'=2 D Q
- ..S YEAR=$S(DGYR=1:"2D",1:"5D")
- ..S DOB=$$FMTE^XLFDT(B,YEAR)
- .S DOB=B
- Q DOB
- ;
- SCREEN(DFN) ;Screening logic for SSN & DOB
- ;Input : DFN - Pointer to PATIENT file (#2)
- ;Output : 1 - Apply screen
- ; 0 - Don't apply screen
- ;Notes : Screen applied if patient is sensitive or an employee
- ;
- N DGTIME,DGT,DGA1,DG1,DGXFR0
- ;Inpatient check - no longer used (kept for future reference)
- ;D H^DGUTL S DGT=DGTIME D ^DGPMSTAT I DG1 Q 0
- ;Sensitive - screen
- I $P($G(^DGSL(38.1,DFN,0)),"^",2) Q 1
- ;Employee - screen
- I $$EMPL^DGSEC4(DFN) Q 1
- ;Don't screen
- Q 0
- DPTLK1 ;ALB/RMO,EG - MAS Patient Look-up Check Cross-References ; 08/15/2006
- +1 ;;5.3;Registration;**32,50,197,249,317,391,244,532,574,620,641,680,538,657,1015**;Aug 13, 1993;Build 21
- FIND ;Cross reference patient lookup
- +1 ;Optional input: DPTNOFZY='1' to suppress fuzzy lookups implemented
- +2 ; by patch DG*5.3*244
- +3 ;
- +4 NEW DDCOMA,DPTXOLD,DPTOUT,DPTOVAL,DGLASTLK
- +5 SET DGLASTLK=1
- +6 SET (DPTXOLD,DPTX)=$$UCASE(DPTX)
- +7 IF DPTX?1A.E1","1.A.E
- SET DPTXOLD=DPTX
- SET DDCOMA="I $E($P($G(DPTVAL),"","",2),1,"_$LENGTH($PIECE(DPTX,",",2))_")="""_$TRANSLATE($PIECE(DPTX,",",2),"""")_""""
- SET DPTX=$PIECE(DPTX,",")
- +8 KILL DPTREFS
- SET DPTREFS=$SELECT(DIC(0)'["M":"B,NOP",DPTX?1A1N.N:$SELECT($LENGTH(DPTX)<6:"BS5,CN,RM",1:"CN,RM"),DPTX?4N!(DPTX?4N1A):"BS,SSN,CN,RM",DPTX?9N.E:"SSN,CN,RM",1:"")
- +9 IF DPTREFS=""
- SET DPTREFS=$SELECT(DPTX?1N.N:$SELECT($LENGTH(DPTX)<5:"CN,RM,BS,SSN",1:"CN,RM,SSN"),DPTX?1N.E:"CN,RM",1:"B,NOP,CN,RM")
- IF $DATA(DPTIX)
- SET DPTREFS=DPTIX_","_DPTREFS
- +10 ;Use cross reference passed to LIST^DPTLK1 by Person Service Lookup (DPTPSREF) if defined.
- +11 IF $GET(DPTPSREF)'=""
- SET DPTREFS=DPTPSREF
- +12 SET DPTBEG=1
- SET (DPTDFN,DPTNUM,DPTOUT)=0
- +13 FOR DPTLP=1:1
- SET DPTREF=$PIECE(DPTREFS,",",DPTLP)
- IF DPTREF=""!(DPTDFN)
- QUIT
- Begin DoDot:1
- +14 SET DPTVAL=DPTX
- +15 IF DPTREF="NOP"
- IF '$GET(DPTNOFZY)
- SET DPTVAL=$$FORMAT^XLFNAME7(DPTVAL,2,30,1,0,,1)
- IF '$LENGTH(DPTVAL)
- QUIT
- +16 DO LOOK(DPTVAL)
- +17 IF DPTREF="B"
- IF '$GET(DPTNOFZY)
- SET DPTVAL=$$FORMAT^XLFNAME7(DPTX,2,30,1,0,,1)
- IF DPTVAL'=DPTX
- DO LOOK(DPTVAL)
- +18 QUIT
- End DoDot:1
- IF DPTDFN!DPTOUT
- QUIT
- SET IF 'DPTDFN
- IF DPTCNT=1&($DATA(DPTIFNS(DPTCNT)))
- SET DPTDFN=+DPTIFNS(DPTCNT)
- SET DPT("NOPRT^")=""
- IF 'DPTDFN&(DPTCNT>DPTNUM)&(DIC(0)["E")
- DO PRTDPT
- KILL DPT("NOPRT^")
- IF 'DPTDFN
- IF $DATA(DPTSEL)
- IF DPTSEL=""
- SET DPTX=""
- SET DPTDFN=-1
- +1 IF DPTDFN'>0
- IF $LENGTH($GET(DPTXOLD))
- IF DPTX=$PIECE(DPTXOLD,",")
- SET DPTX=DPTXOLD
- +2 IF DPTDFN>0
- IF $DATA(DPTXOLD)
- SET DPTX=DPTXOLD
- +3 ; one last stab at lookup - DG*641
- +4 IF '$GET(DPTCNT)
- IF DPTX[","
- IF DGLASTLK=1
- IF '$GET(DPTNOFZY)
- Begin DoDot:1
- +5 SET DPTX=$$FORMAT^XLFNAME7(DPTX,2,30,1)
- +6 SET DDCOMA="I $E($P($G(DPTVAL),"","",2),1,"_$LENGTH($PIECE(DPTX,",",2))_")="""_$TRANSLATE($PIECE(DPTX,",",2),"""")_""""
- +7 SET DPTX=$PIECE(DPTX,",")
- +8 SET DGLASTLK=0
- +9 SET DPTREFS="B,NOP,CN,RM"
- +10 ;Person Service Lookup does not allow lookup by RM cross reference
- +11 ;PSL release 4 does not allow lookup by ward (CN) cross reference
- +12 IF $GET(DPTPSREF)'=""
- SET DPTREFS="B,NOP"
- +13 FOR DPTLP=1:1
- SET DPTREF=$PIECE(DPTREFS,",",DPTLP)
- IF DPTREF=""!(DPTDFN)
- QUIT
- Begin DoDot:2
- +14 SET DPTVAL=DPTX
- +15 DO LOOK(DPTVAL)
- End DoDot:2
- IF DPTDFN!DPTOUT
- QUIT
- End DoDot:1
- +16 IF DGLASTLK=0
- IF $GET(DPTCNT)
- SET DGLASTLK=1
- GOTO SET
- +17 IF DGLASTLK=0
- IF '$GET(DPTCNT)
- IF $LENGTH($GET(DPTXOLD))
- SET DPTX=DPTXOLD
- +18 ; end of DG*641 change
- +19 ;
- Q KILL DPTBEG,DPTIFN,DPTIFNS,DPTLP,DPTLP1,DPTNUM,DPTREF,DPTREFS,DPTVAL
- +1 KILL DPTOVAL,DPTOUT,DPTXOLD,^TMP("DPTLK",$JOB)
- +2 QUIT
- +3 ;
- LOOK(DPTVAL) ;Look for x-ref matches
- +1 ;Input: DPTVAL=lookup seed value
- +2 IF $LENGTH(DPTVAL)
- IF $DATA(^DPT(DPTREF,DPTVAL))
- DO CHKIFN
- IF DPTDFN!DPTOUT
- QUIT
- +3 IF $LENGTH(DPTVAL)
- IF '($DATA(^DPT(DPTREF,DPTVAL))&(DIC(0)["O"))&(DIC(0)'["X")
- DO CHKVAL
- +4 QUIT
- +5 ;
- CHKVAL SET DPTOVAL=DPTVAL
- +1 NEW DPTSEED
- SET DPTSEED=DPTVAL
- +2 IF DPTREF="SSN"
- IF (DPTVAL?9N1"p")
- Begin DoDot:1
- +3 SET DPTVAL=$EXTRACT(DPTVAL,1,9)_"P"
- DO CHKIFN
- +4 QUIT
- End DoDot:1
- QUIT
- +5 IF DPTREF="SSN"
- IF (DPTVAL?2.9N)
- Begin DoDot:1
- +6 SET DPTVAL=$EXTRACT(DPTVAL_"0000000",1,9)
- +7 DO CV1(DPTVAL)
- DO CHKIFN
- +8 SET DPTVAL=DPTVAL_"P"
- DO CV1(DPTVAL)
- DO CHKIFN
- +9 QUIT
- End DoDot:1
- QUIT
- +10 DO CV1(DPTVAL)
- +11 IF DPTREF="CN"!(DPTREF="RM")
- IF DPTVAL'["E"
- IF DPTVAL=+DPTVAL
- IF '$DATA(^DPT(DPTREF,DPTVAL))
- Begin DoDot:1
- +12 SET DPTVAL=$ORDER(^DPT(DPTREF,DPTVAL_" "),-1)
- +13 DO CV1(DPTVAL)
- +14 QUIT
- End DoDot:1
- QUIT
- +15 QUIT
- +16 ;
- CV1(DPTVAL) ;Look for input value matches
- +1 IF $LENGTH(DPTVAL)
- FOR DPTLP1=0:0
- SET DPTVAL=$ORDER(^DPT(DPTREF,DPTVAL))
- IF DPTVAL=""!(DPTDFN)!($PIECE(DPTVAL,DPTSEED)'="")
- QUIT
- DO CHKIFN
- +2 QUIT
- +3 ;
- CHKIFN FOR DPTIFN=0:0
- SET DPTIFN=$ORDER(^DPT(DPTREF,DPTVAL,DPTIFN))
- IF 'DPTIFN!(DPTDFN)!DPTOUT
- QUIT
- SET Y=DPTIFN
- DO SETDPT
- IF $STORAGE<DPTSZ
- FOR I=1:1:DPTNUM-7
- SET J=$SELECT($DATA(DPTIFNS(I)):+DPTIFNS(I),1:0)
- KILL DPTIFNS(I),DPTS(J)
- SET DPTBEG=I
- +1 QUIT
- +2 ;
- SETDPT IF ($DATA(DPTS(Y))&($GET(DPTREF)'="B"))!'$DATA(^DPT(Y,0))
- QUIT
- +1 ; screen out MERGED FROM records - DG/574
- +2 IF $DATA(^DPT(Y,-9))
- QUIT
- +3 NEW DPTNVAL
- IF '$DATA(DPTOVAL)
- NEW DPTOVAL
- SET DPTOVAL=DPTX
- +4 IF 1
- SET X=DPTOVAL
- IF $DATA(DIC("S"))
- XECUTE DIC("S")
- IF '$TEST
- QUIT
- IF ($DATA(DO("SCR")))
- XECUTE DO("SCR")
- IF '$TEST
- QUIT
- IF $DATA(DDCOMA)
- XECUTE DDCOMA
- IF '$TEST
- QUIT
- +5 IF $GET(DPTCNT)<1
- KILL ^TMP("DPTLK",$JOB)
- +6 SET DPTS(Y)=$SELECT('$DATA(DPTREF):$PIECE(^DPT(Y,0),U),1:$PIECE(^DPT(Y,0),U))_U_$SELECT($DATA(DPTVAL):$EXTRACT(DPTVAL,($LENGTH(DPTOVAL)+1),$LENGTH(DPTVAL)),1:"")
- +7 SET DPTNVAL=$PIECE(^DPT(Y,0),U)_U_$SELECT($GET(DPTREF)="NOP":$PIECE(^DPT(Y,0),U),$DATA(DPTVAL):DPTVAL,1:"")
- +8 IF $DATA(^TMP("DPTLK",$JOB,Y,DPTNVAL))
- QUIT
- +9 SET DPTCNT=DPTCNT+1
- SET ^TMP("DPTLK",$JOB,Y,DPTNVAL)=""
- SET DPTIFNS(DPTCNT)=Y_U_DPTNVAL
- +10 IF $DATA(DPTLARR)
- Begin DoDot:1
- +11 IF DPTLMAX
- IF DPTCNT>DPTLMAX
- Begin DoDot:2
- +12 SET @DPTLARR@(DPTCNT)="ADDITIONAL MATCHES FOUND BUT NOT RETURNED"
- +13 SET DPTOUT=1
- +14 QUIT
- End DoDot:2
- QUIT
- +15 SET @DPTLARR@(DPTCNT)=DPTIFNS(DPTCNT)_U_$$SSN(Y)_U_$$DOB(Y)
- +16 QUIT
- End DoDot:1
- QUIT
- +17 IF '(DPTCNT#5)
- IF DIC(0)["E"
- DO PRTDPT
- +18 QUIT
- +19 ;
- PRTDPT IF $DATA(DDS)
- DO CLRMSG^DDS
- SET DX=0
- SET DY=DDSHBX+1
- XECUTE DDXY
- SET X=0
- XECUTE ^%ZOSF("RM")
- +1 NEW DPTP1,DPTP2
- +2 FOR DPTNUM=DPTNUM+1:1:DPTCNT
- IF DPTOUT
- QUIT
- SET DPTIFN=+DPTIFNS(DPTNUM)
- Begin DoDot:1
- +3 IF '$DATA(DDS)
- WRITE !
- +4 SET DPTP2=$PIECE(DPTIFNS(DPTNUM),U,3)
- +5 SET DPTP1=$PIECE(DPTIFNS(DPTNUM),U,2)
- +6 WRITE ?3,DPTNUM,?$X+(4-$LENGTH(DPTNUM))
- +7 ; write the xref value
- +8 WRITE DPTP2_" "
- +9 ; write patient name if diff than xref value
- +10 IF DPTP1'=DPTP2
- WRITE DPTP1
- +11 SET Y=DPTIFN
- IF $DATA(^DPT(DPTIFN,0))
- XECUTE "N DDS X DIC(""W"")"
- IF $DATA(DDS)
- SET DY=DY+1
- SET DX=0
- XECUTE DDXY
- SET $X=0
- End DoDot:1
- +12 IF '$DATA(DPT("NOPRT^"))
- IF '$DATA(DDS)
- WRITE !
- WRITE "ENTER '^' TO STOP, OR "
- +13 IF '$DATA(DDS)
- WRITE !
- WRITE "CHOOSE ",DPTBEG,"-",DPTNUM,": "
- READ X:DTIME
- SET DPTSEL=X
- Begin DoDot:1
- +14 IF '$TEST
- SET DPTSEL=$SELECT($DATA(DPTOVAL):DPTOVAL,$DATA(DPTVAL):DPTVAL,$DATA(DPTX):DPTX,$DATA(DPTXOLD):DPTXOLD,1:"")
- SET (DPTOUT,DTOUT)=1
- +15 IF X="^"
- SET (DPTOUT,DUOUT)=1
- End DoDot:1
- IF DPTSEL=""!$DATA(DTOUT)!$DATA(DUOUT)
- QUIT
- +16 SET DPTDFN=$SELECT(DPTSEL'?.ANP!($LENGTH(DPTSEL)>30):-1,'$DATA(DPTIFNS(DPTSEL)):-1,$DATA(DPTS(+DPTIFNS(DPTSEL))):+DPTIFNS(DPTSEL),1:-1)
- SET DPTX=$SELECT(DPTDFN<0:DPTSEL,1:DPTX)
- +17 IF DPTDFN=-1
- SET DPTXOLD=DPTSEL
- +18 QUIT
- +19 ;
- LIST(DPTX,DPTLMAX,DPTLARR) ;Silent lookup list
- +1 ;Input: DPTX=lookup value (name, SSN, room, ward, DFN or
- +2 ; "space_return").
- +3 ; DPTLMAX=maximum number of matches to return (optional), this
- +4 ; parameter has no effect if DFN or "space_return"
- +5 ; lookup methods are used.
- +6 ; DPTLARR=name of array to return list of matches, this should
- +7 ; be a global if DPTLMAX is a large value or unspecified
- +8 ; This array is returned in the format:
- +9 ; @DPTLARR@(n)=DFN^patient_name^xref_lookup_match_value^
- +10 ; SSN^Date_of_Birth
- +11 ; If more matches exist than the maximum to be returned
- +12 ; as specified by DPTLMAX, the @DPTLARR@(DPTLMAX+1) node
- +13 ; will be defined = "ADDITIONAL MATCHES FOUND BUT NOT
- +14 ; RETURNED".
- +15 ; The calling program has the responsibility to kill
- +16 ; @DPTLARR prior to calling this entry point.
- +17 ;Output: number of matches and array named by DPTLARR.
- +18 ;
- +19 NEW X,Y,DPTCNT,DIC,DPTSZ,DPTDFN,DPTIFNS,DPTS
- +20 SET DPTCNT=0
- SET DIC(0)="M"
- SET DPTSZ=1000
- IF $GET(DPTLMAX)<1
- SET DPTLMAX=0
- +21 ;Check for "space_return" or DFN lookup
- +22 IF DPTX=" "!($EXTRACT(DPTX)="`")
- Begin DoDot:1
- +23 IF DPTX=" "
- SET Y=$SELECT('($DATA(DUZ)#2):-1,$DATA(^DISV(DUZ,"^DPT(")):^("^DPT("),1:-1)
- +24 IF $EXTRACT(DPTX)="`"
- SET Y=$SELECT($DATA(^DPT(+$PIECE(DPTX,"`",2),0)):+$PIECE(DPTX,"`",2),1:-1)
- +25 IF Y<1
- QUIT
- IF '$DATA(^DPT(Y,0))
- QUIT
- DO SETDPT
- SET DPTCNT=1
- +26 QUIT
- End DoDot:1
- QUIT DPTCNT
- +27 DO FIND
- +28 QUIT $SELECT(DPTLMAX&(DPTCNT>DPTLMAX):DPTLMAX,1:DPTCNT)
- +29 ;
- UCASE(DGX) ;Uppercase lookup value
- +1 ;Input: DGX=lookup value
- +2 ;Output: transformed DGX
- +3 NEW DGI,DGY,DGZ
- SET DGZ=DGX
- SET DGX=""
- +4 FOR DGI=1:1:$LENGTH(DGZ)
- SET DGY=$EXTRACT(DGZ,DGI)
- Begin DoDot:1
- +5 IF DGY?1L
- SET DGY=$CHAR($ASCII(DGY)-32)
- +6 SET DGX=DGX_DGY
- End DoDot:1
- +7 QUIT DGX
- +8 ;
- SSN(DFN) ;do not show ssn identifier for patient
- +1 ; input DFN = ien in file #2 [required]
- +2 ; output SSN = nnnnnnnnn
- +3 ;
- +4 NEW SSN
- +5 SET SSN=""
- SET DFN=+DFN
- +6 IF DFN>0
- Begin DoDot:1
- +7 IF $$SCREEN(DFN)
- SET SSN="*SENSITIVE*"
- QUIT
- +8 SET SSN=$PIECE($GET(^DPT(DFN,0)),U,9)
- +9 ; DG*5.3*657 BAJ 11/20 2005
- +10 ; display Pseudo SSN alert on list
- +11 IF SSN?9N1"P"
- SET SSN=SSN_" **Pseudo SSN**"
- +12 QUIT
- End DoDot:1
- +13 QUIT SSN
- +14 ;
- DOB(DFN,DGYR) ;do not show dob identifier for patient
- +1 ; input DFN = ien in file #2 [required]
- +2 ; DGYR = 0/1 [optional]
- +3 ; where 0 returns 4-digit year (default)
- +4 ; 1 returns 2-digit year
- +5 ; 2 returns File manager date
- +6 ; output DOB = mm/dd/yyyy (default)
- +7 ; = mm/dd/yy, if DGYR=1
- +8 ; = yyymmdd, if DGYR=2
- +9 NEW B,DOB,YEAR
- +10 SET DOB=""
- SET DFN=+DFN
- SET DGYR=+$GET(DGYR)
- +11 IF DFN>0
- Begin DoDot:1
- +12 IF $$SCREEN(DFN)
- SET DOB="*SENSITIVE*"
- QUIT
- +13 SET B=$PIECE($GET(^DPT(DFN,0)),U,3)
- +14 IF DGYR'=2
- Begin DoDot:2
- +15 SET YEAR=$SELECT(DGYR=1:"2D",1:"5D")
- +16 SET DOB=$$FMTE^XLFDT(B,YEAR)
- End DoDot:2
- QUIT
- +17 SET DOB=B
- End DoDot:1
- +18 QUIT DOB
- +19 ;
- SCREEN(DFN) ;Screening logic for SSN & DOB
- +1 ;Input : DFN - Pointer to PATIENT file (#2)
- +2 ;Output : 1 - Apply screen
- +3 ; 0 - Don't apply screen
- +4 ;Notes : Screen applied if patient is sensitive or an employee
- +5 ;
- +6 NEW DGTIME,DGT,DGA1,DG1,DGXFR0
- +7 ;Inpatient check - no longer used (kept for future reference)
- +8 ;D H^DGUTL S DGT=DGTIME D ^DGPMSTAT I DG1 Q 0
- +9 ;Sensitive - screen
- +10 IF $PIECE($GET(^DGSL(38.1,DFN,0)),"^",2)
- QUIT 1
- +11 ;Employee - screen
- +12 IF $$EMPL^DGSEC4(DFN)
- QUIT 1
- +13 ;Don't screen
- +14 QUIT 0