LRDPAREF ;VA/DALOI/FHS - PENDING ORDER FILE PATIENT LOOKUP ;JUL 06, 2010 3:14 PM
;;5.2;LAB SERVICE;**153,222,286,1027**;NOV 01, 1997
; Special patient lookup of Lab Orders Pending File
;
EN ; From ^LRDPA
; Initialize array LRSD.
; CDT=collection date/time
; DFN=ien of patient in selected file
; DOB=patient's date of birth
; DPF=source file (2, or 67)
; ERROR=0
; LPC=longitudinal parity check
; PNM=patient name
; RIEN=IEN of ^LRT(67
; RPSITE=primary sending site
; RSITE=sending site
; RSITEN=sending site name
; RUID=specimen unique identifier
; SEX=patient's sex
; SSN=patient's SSN
; LA7PNM=Patient Bar code read if lookup fails
; On exit LRDPF set to '67^LRT(67, DFN=RIEN
;
N DA,DIC,DIE,DIR,DIRUT,DTOUT,DUOUT
;
K LRSD,LA7PNM
;
F Y="CDT","DFN","DOB","DPF","ERROR","LPC","PNM","RIEN","RPSITE","RSITE","RUID","SEX","SSN" S LRSD(Y)=""
S LREND=0
D:'$D(LRLABKY) LABKEY^LRPARAM
I $G(LRREFBAR) D Q:$G(LREND)
. D BAR K LA7PNM
. I LRSD("ERROR") D
. . D ERRMSG(LRSD("ERROR"),"Barcode error #")
. . I +LRSD("ERROR")=1 D CLEAN
I '$G(LRREFBAR)!(LRSD("ERROR")) D MAN
I $G(LREND) D CLEAN Q
I LRSD("ERROR") D Q
. I LRSD("ERROR") D ERRMSG(LRSD("ERROR"),"Error #")
. D CLEAN
S LRSD("RPSITE")=LRRSITE("RPSITE")
CK ;S PNM=LRSD("PNM"),SSN=LRSD("SSN"),DOB=LRSD("DOB"),SEX=LRSD("SEX"),LRXDPF=LRSD("DPF"),LRXDFN=LRSD("DFN")
D ^LRDPAREX
I $G(LREND)!($G(LRSD("ERROR"))) D G CLEAN
. S LRSD("ERROR",1)="12^Validation Failure "
. W !,$C(7),$P(LRSD("ERROR"),"^",2),!
OK ;
S:'$G(DFN) DFN=-1 S Y=DFN
I DFN=-1 S LRDFN=-1 K DIC S VA200="" Q
S X="^"_$P(LRDPF,"^",2)_Y_",""LR"")",LRDFN=+$S($D(@X):@X,1:-1) G E3:LRDFN>0
L +^LR(0):999999
S LRDFN=$P(^LR(0),U,3) S:LRDFN<1 LRDFN=1
F LRDFN=LRDFN:1 Q:'$D(^LR(LRDFN,0))#2
S ^LR(0)=$P(^LR(0),"^",1,2)_"^"_LRDFN_"^"_(1+$P(^(0),"^",4))
E2 L +^LR(LRDFN):999999
S ^LR(LRDFN,0)=LRDFN_"^"_+LRDPF_"^"_DFN
S ^LR("B",LRDFN,LRDFN)=""
S @X=LRDFN,^LRT(67,LRSD("RIEN"),"LR")=LRDFN
L -(^LR(0),^LR(LRDFN))
E3 I '$D(^LR(LRDFN,0))#2 D Q
. W !!,"Internal patient ID incorrect in ^LR( for ",PNM,"."
. W !,"Contact Lab Coordinator.",$C(7)
. S LRDFN=-1
I LRDFN>0,$P(^LR(LRDFN,0),"^",2)'=+LRDPF!($P(^(0),"^",3)'=DFN) D Q
. W !,$C(7),"Internal patient ID incorrect for ",PNM,"."
. W !,"Contact Lab Coordinator."
. S LRDFN=-1
D INF^LRX,PT^LRX
RUID ;
I LRSD("RUID")="" D
. N DIR,DIRUT,DTOUT,X,Y
. ; If VA facility, require 10 character UID.
. I LRRSITE("RSITE"),$$GET1^DIQ(4,+LRRSITE("RSITE")_",",95,"I")="V" D
. . S DIR(0)="F^10:10^K:X'?1(10N,1U9N,2U8N,1N1U8N) X"
. . S DIR("?")="Enter the sending facility's ten character UID for this specimen"
. E S DIR(0)="F^1:30",DIR("?")="Enter sending facility's specimen ID, 1-30 characters"
. S DIR("A")="Enter Remote UID"
. D ^DIR
. I $D(DIRUT) D CLEAN Q
. S LRSD("RUID")=Y
;
Q
DUP W !?5,"There are duplicate SSNs in the Referral File <abort>",!,$C(7)
ERR ;
S LRDFN=-1 W !,"ERROR",!
Q
;
ERR1 ;
S LRDFN=-1 W !,"ERROR1",!
Q
;
CLEAN ;
S LRDFN=-1,LREND=1
Q
;
;
BAR ; Scan PD bar code for patient/specimen info
;
N DA,DIC,DIR,DIRUT,DR,DTOUT,DUOUT
;
D PT^LA7SBCR1(.LRSD,"Scan Patient/Accession Barcode (PD)",.LRRSITE)
I LRSD("ERROR") Q
D DIQ
Q
;
;
MAN ; Manual referral patient lookup
;
N DIR,DIC,DA,X,Y
K ^DISV(DUZ,"^DPT("),^("^LRT(67,")
;
; Lookup using file #69.6 if manifest exists and not using bar code scanner
I '$G(LRREFBAR),$G(LRRSITE("SMID-OK")),LRRSITE("SMID")'="",$D(^LRO(69.6,"D",LRRSITE("SMID"))) D MF696 Q
;
; Ask user for information
S LRSD("ERROR")=""
S DIR(0)="67,3",DIR("A")="Select Patient Name -'^M' To enter New Name "
D ^DIR
I $D(DIRUT) S LRSD("ERROR")="1^User timeout/abort or Up-arrow entered"
I Y["DPT(" D DPTSET^LA7SBCR1(.LRSD,+Y)
I Y["LRT(" D LRTSET^LA7SBCR1(.LRSD,+Y)
I $E(X,1,2)="^M" D Q
. K DIRUT,DIR
. D KEYIN^LRDPAREX
. S:$G(LREND) LRSD("ERROR")="15^Manual Patient entry not complete"
I LRSD("ERROR") Q
D DIQ K DIR
S DIR(0)="Y",DIR("A")="Is this the correct patient" D ^DIR
I Y'=1 S LRSD("ERROR")="5^Unsuccessful patient lookup" D CLEAN
Q
;
;
MF696 ; Manual lookup of file #69.6
N DIR,DIC,LAIEN,LRSCN696,X,Y
S Y=$$FIND1^DIC(64.061,"","OMX","In-Transit","","I $P(^LAB(64.061,Y,0),U,7)=""U""")
I Y>0 S LRSCN696=+Y
E S LRSCN696=""
S DIR(0)="PO^69.6:NEMQZ"
S DIR("S")="I $P(^(0),U,10)="_LRSCN696_",$D(^LRO(69.6,""D"",LRRSITE(""SMID""),Y))"
S DIR("A")="Enter UID of specimen"
D ^DIR
I $D(DIRUT) S LREND=1 Q
S LAIEN=Y,(LA7Y(0),LAIEN(0))=Y(0)
D GETS^DIQ(69.6,+LAIEN_",","*","IE","LAIEN")
S LRSD("DPF")="67^LRT(67,"
S LRSD("PNM")=LAIEN(69.6,+LAIEN_",",.01,"I")
S LRSD("DOB")=LAIEN(69.6,+LAIEN_",",.03,"I")
S LRSD("SEX")=LAIEN(69.6,+LAIEN_",",.02,"I")
S LRSD("RACE")=LAIEN(69.6,+LAIEN_",",.06,"I")
S LRSD("SSN")=LAIEN(69.6,+LAIEN_",",.09,"I")
S LRSD("CDT")=LAIEN(69.6,+LAIEN_",",11,"I")
S (LRRSITE("RPSITE"),LRSD("RPSITE"))=LAIEN(69.6,+LAIEN_",",1,"I")
S LRSD("RSITE")=LAIEN(69.6,+LAIEN_",",2,"I")
S LRSD("RSITEN")=$E(LAIEN(69.6,+LAIEN_",",2,"E"),1,19)
S LRSD("RUID")=LAIEN(69.6,+LAIEN_",",3,"I")
S LRSD("SMID")=LRRSITE("SMID")
I LRSD("SSN")="" S LRSD("SSN")=LAIEN(69.6,+LAIEN_",",700.04,"I")
I LRSD("SSN")="" S LRSD("ERROR")="2^Patient Identifier Absent" Q
S LRSD("RIEN")=$O(^LRT(67,"C",LRSD("SSN"),0))
I $G(LRSD("RIEN")),$G(^LRT(67,LRSD("RIEN"),"LR")) S LRSD("LRDFN")=^("LR"),LRSD("DFN")=LRSD("RIEN")
Q
;
;
DIQ ; Display patient info
Q:'$G(LRSD("DFN"))
N DA,DIC,DX,S
S DIC=$S(+LRSD("DPF")=2:"^DPT(",+LRSD("DPF")=67:"^LRT(67,",1:"")
I DIC="" Q
S DA=LRSD("DFN"),DR=0,S=0
W @IOF
D EN^LRDIQ
Q
;
ERRMSG(X,Y) ; Display error message to user
; Call with X=error message code^error message text
; Y=message prefix
S X=Y_$P(LRSD("ERROR"),"^")_" - "_$P(LRSD("ERROR"),"^",2)
D EN^DDIOL(X,"","!?5")
Q
LRDPAREF ;VA/DALOI/FHS - PENDING ORDER FILE PATIENT LOOKUP ;JUL 06, 2010 3:14 PM
+1 ;;5.2;LAB SERVICE;**153,222,286,1027**;NOV 01, 1997
+2 ; Special patient lookup of Lab Orders Pending File
+3 ;
EN ; From ^LRDPA
+1 ; Initialize array LRSD.
+2 ; CDT=collection date/time
+3 ; DFN=ien of patient in selected file
+4 ; DOB=patient's date of birth
+5 ; DPF=source file (2, or 67)
+6 ; ERROR=0
+7 ; LPC=longitudinal parity check
+8 ; PNM=patient name
+9 ; RIEN=IEN of ^LRT(67
+10 ; RPSITE=primary sending site
+11 ; RSITE=sending site
+12 ; RSITEN=sending site name
+13 ; RUID=specimen unique identifier
+14 ; SEX=patient's sex
+15 ; SSN=patient's SSN
+16 ; LA7PNM=Patient Bar code read if lookup fails
+17 ; On exit LRDPF set to '67^LRT(67, DFN=RIEN
+18 ;
+19 NEW DA,DIC,DIE,DIR,DIRUT,DTOUT,DUOUT
+20 ;
+21 KILL LRSD,LA7PNM
+22 ;
+23 FOR Y="CDT","DFN","DOB","DPF","ERROR","LPC","PNM","RIEN","RPSITE","RSITE","RUID","SEX","SSN"
SET LRSD(Y)=""
+24 SET LREND=0
+25 IF '$DATA(LRLABKY)
DO LABKEY^LRPARAM
+26 IF $GET(LRREFBAR)
Begin DoDot:1
+27 DO BAR
KILL LA7PNM
+28 IF LRSD("ERROR")
Begin DoDot:2
+29 DO ERRMSG(LRSD("ERROR"),"Barcode error #")
+30 IF +LRSD("ERROR")=1
DO CLEAN
End DoDot:2
End DoDot:1
IF $GET(LREND)
QUIT
+31 IF '$GET(LRREFBAR)!(LRSD("ERROR"))
DO MAN
+32 IF $GET(LREND)
DO CLEAN
QUIT
+33 IF LRSD("ERROR")
Begin DoDot:1
+34 IF LRSD("ERROR")
DO ERRMSG(LRSD("ERROR"),"Error #")
+35 DO CLEAN
End DoDot:1
QUIT
+36 SET LRSD("RPSITE")=LRRSITE("RPSITE")
CK ;S PNM=LRSD("PNM"),SSN=LRSD("SSN"),DOB=LRSD("DOB"),SEX=LRSD("SEX"),LRXDPF=LRSD("DPF"),LRXDFN=LRSD("DFN")
+1 DO ^LRDPAREX
+2 IF $GET(LREND)!($GET(LRSD("ERROR")))
Begin DoDot:1
+3 SET LRSD("ERROR",1)="12^Validation Failure "
+4 WRITE !,$CHAR(7),$PIECE(LRSD("ERROR"),"^",2),!
End DoDot:1
GOTO CLEAN
OK ;
+1 IF '$GET(DFN)
SET DFN=-1
SET Y=DFN
+2 IF DFN=-1
SET LRDFN=-1
KILL DIC
SET VA200=""
QUIT
+3 SET X="^"_$PIECE(LRDPF,"^",2)_Y_",""LR"")"
SET LRDFN=+$SELECT($DATA(@X):@X,1:-1)
IF LRDFN>0
GOTO E3
+4 LOCK +^LR(0):999999
+5 SET LRDFN=$PIECE(^LR(0),U,3)
IF LRDFN<1
SET LRDFN=1
+6 FOR LRDFN=LRDFN:1
IF '$DATA(^LR(LRDFN,0))#2
QUIT
+7 SET ^LR(0)=$PIECE(^LR(0),"^",1,2)_"^"_LRDFN_"^"_(1+$PIECE(^(0),"^",4))
E2 LOCK +^LR(LRDFN):999999
+1 SET ^LR(LRDFN,0)=LRDFN_"^"_+LRDPF_"^"_DFN
+2 SET ^LR("B",LRDFN,LRDFN)=""
+3 SET @X=LRDFN
SET ^LRT(67,LRSD("RIEN"),"LR")=LRDFN
+4 LOCK -(^LR(0),^LR(LRDFN))
E3 IF '$DATA(^LR(LRDFN,0))#2
Begin DoDot:1
+1 WRITE !!,"Internal patient ID incorrect in ^LR( for ",PNM,"."
+2 WRITE !,"Contact Lab Coordinator.",$CHAR(7)
+3 SET LRDFN=-1
End DoDot:1
QUIT
+4 IF LRDFN>0
IF $PIECE(^LR(LRDFN,0),"^",2)'=+LRDPF!($PIECE(^(0),"^",3)'=DFN)
Begin DoDot:1
+5 WRITE !,$CHAR(7),"Internal patient ID incorrect for ",PNM,"."
+6 WRITE !,"Contact Lab Coordinator."
+7 SET LRDFN=-1
End DoDot:1
QUIT
+8 DO INF^LRX
DO PT^LRX
RUID ;
+1 IF LRSD("RUID")=""
Begin DoDot:1
+2 NEW DIR,DIRUT,DTOUT,X,Y
+3 ; If VA facility, require 10 character UID.
+4 IF LRRSITE("RSITE")
IF $$GET1^DIQ(4,+LRRSITE("RSITE")_",",95,"I")="V"
Begin DoDot:2
+5 SET DIR(0)="F^10:10^K:X'?1(10N,1U9N,2U8N,1N1U8N) X"
+6 SET DIR("?")="Enter the sending facility's ten character UID for this specimen"
End DoDot:2
+7 IF '$TEST
SET DIR(0)="F^1:30"
SET DIR("?")="Enter sending facility's specimen ID, 1-30 characters"
+8 SET DIR("A")="Enter Remote UID"
+9 DO ^DIR
+10 IF $DATA(DIRUT)
DO CLEAN
QUIT
+11 SET LRSD("RUID")=Y
End DoDot:1
+12 ;
+13 QUIT
DUP WRITE !?5,"There are duplicate SSNs in the Referral File <abort>",!,$CHAR(7)
ERR ;
+1 SET LRDFN=-1
WRITE !,"ERROR",!
+2 QUIT
+3 ;
ERR1 ;
+1 SET LRDFN=-1
WRITE !,"ERROR1",!
+2 QUIT
+3 ;
CLEAN ;
+1 SET LRDFN=-1
SET LREND=1
+2 QUIT
+3 ;
+4 ;
BAR ; Scan PD bar code for patient/specimen info
+1 ;
+2 NEW DA,DIC,DIR,DIRUT,DR,DTOUT,DUOUT
+3 ;
+4 DO PT^LA7SBCR1(.LRSD,"Scan Patient/Accession Barcode (PD)",.LRRSITE)
+5 IF LRSD("ERROR")
QUIT
+6 DO DIQ
+7 QUIT
+8 ;
+9 ;
MAN ; Manual referral patient lookup
+1 ;
+2 NEW DIR,DIC,DA,X,Y
+3 KILL ^DISV(DUZ,"^DPT("),^("^LRT(67,")
+4 ;
+5 ; Lookup using file #69.6 if manifest exists and not using bar code scanner
+6 IF '$GET(LRREFBAR)
IF $GET(LRRSITE("SMID-OK"))
IF LRRSITE("SMID")'=""
IF $DATA(^LRO(69.6,"D",LRRSITE("SMID")))
DO MF696
QUIT
+7 ;
+8 ; Ask user for information
+9 SET LRSD("ERROR")=""
+10 SET DIR(0)="67,3"
SET DIR("A")="Select Patient Name -'^M' To enter New Name "
+11 DO ^DIR
+12 IF $DATA(DIRUT)
SET LRSD("ERROR")="1^User timeout/abort or Up-arrow entered"
+13 IF Y["DPT("
DO DPTSET^LA7SBCR1(.LRSD,+Y)
+14 IF Y["LRT("
DO LRTSET^LA7SBCR1(.LRSD,+Y)
+15 IF $EXTRACT(X,1,2)="^M"
Begin DoDot:1
+16 KILL DIRUT,DIR
+17 DO KEYIN^LRDPAREX
+18 IF $GET(LREND)
SET LRSD("ERROR")="15^Manual Patient entry not complete"
End DoDot:1
QUIT
+19 IF LRSD("ERROR")
QUIT
+20 DO DIQ
KILL DIR
+21 SET DIR(0)="Y"
SET DIR("A")="Is this the correct patient"
DO ^DIR
+22 IF Y'=1
SET LRSD("ERROR")="5^Unsuccessful patient lookup"
DO CLEAN
+23 QUIT
+24 ;
+25 ;
MF696 ; Manual lookup of file #69.6
+1 NEW DIR,DIC,LAIEN,LRSCN696,X,Y
+2 SET Y=$$FIND1^DIC(64.061,"","OMX","In-Transit","","I $P(^LAB(64.061,Y,0),U,7)=""U""")
+3 IF Y>0
SET LRSCN696=+Y
+4 IF '$TEST
SET LRSCN696=""
+5 SET DIR(0)="PO^69.6:NEMQZ"
+6 SET DIR("S")="I $P(^(0),U,10)="_LRSCN696_",$D(^LRO(69.6,""D"",LRRSITE(""SMID""),Y))"
+7 SET DIR("A")="Enter UID of specimen"
+8 DO ^DIR
+9 IF $DATA(DIRUT)
SET LREND=1
QUIT
+10 SET LAIEN=Y
SET (LA7Y(0),LAIEN(0))=Y(0)
+11 DO GETS^DIQ(69.6,+LAIEN_",","*","IE","LAIEN")
+12 SET LRSD("DPF")="67^LRT(67,"
+13 SET LRSD("PNM")=LAIEN(69.6,+LAIEN_",",.01,"I")
+14 SET LRSD("DOB")=LAIEN(69.6,+LAIEN_",",.03,"I")
+15 SET LRSD("SEX")=LAIEN(69.6,+LAIEN_",",.02,"I")
+16 SET LRSD("RACE")=LAIEN(69.6,+LAIEN_",",.06,"I")
+17 SET LRSD("SSN")=LAIEN(69.6,+LAIEN_",",.09,"I")
+18 SET LRSD("CDT")=LAIEN(69.6,+LAIEN_",",11,"I")
+19 SET (LRRSITE("RPSITE"),LRSD("RPSITE"))=LAIEN(69.6,+LAIEN_",",1,"I")
+20 SET LRSD("RSITE")=LAIEN(69.6,+LAIEN_",",2,"I")
+21 SET LRSD("RSITEN")=$EXTRACT(LAIEN(69.6,+LAIEN_",",2,"E"),1,19)
+22 SET LRSD("RUID")=LAIEN(69.6,+LAIEN_",",3,"I")
+23 SET LRSD("SMID")=LRRSITE("SMID")
+24 IF LRSD("SSN")=""
SET LRSD("SSN")=LAIEN(69.6,+LAIEN_",",700.04,"I")
+25 IF LRSD("SSN")=""
SET LRSD("ERROR")="2^Patient Identifier Absent"
QUIT
+26 SET LRSD("RIEN")=$ORDER(^LRT(67,"C",LRSD("SSN"),0))
+27 IF $GET(LRSD("RIEN"))
IF $GET(^LRT(67,LRSD("RIEN"),"LR"))
SET LRSD("LRDFN")=^("LR")
SET LRSD("DFN")=LRSD("RIEN")
+28 QUIT
+29 ;
+30 ;
DIQ ; Display patient info
+1 IF '$GET(LRSD("DFN"))
QUIT
+2 NEW DA,DIC,DX,S
+3 SET DIC=$SELECT(+LRSD("DPF")=2:"^DPT(",+LRSD("DPF")=67:"^LRT(67,",1:"")
+4 IF DIC=""
QUIT
+5 SET DA=LRSD("DFN")
SET DR=0
SET S=0
+6 WRITE @IOF
+7 DO EN^LRDIQ
+8 QUIT
+9 ;
ERRMSG(X,Y) ; Display error message to user
+1 ; Call with X=error message code^error message text
+2 ; Y=message prefix
+3 SET X=Y_$PIECE(LRSD("ERROR"),"^")_" - "_$PIECE(LRSD("ERROR"),"^",2)
+4 DO EN^DDIOL(X,"","!?5")
+5 QUIT