LA7QRY ;VA/DALOI/JMC - Lab HL7 Query Utility ; 13-Aug-2013 09:09 ; MKK
;;5.2;AUTOMATED LAB INSTRUMENTS;**46,1018,69,1027,68,1033**;NOV 1, 1997
;
; Reference to variable DIQUIET supported by DBIA #2098
; Reference to ^DPT("SSN") global supported by DBIA #10035
;
Q
;
GCPR(LA7PTID,LA7SDT,LA7EDT,LA7SC,LA7SPEC,LA7QERR,LA7DEST,LA7HL7) ; Entry point for Government Computerized Patient Record query
;
; Call with LA7PTID = patient identifier, either SSN or MPI/ICN or medical record number.
; if MPI/ICN then should be full ICN (10 digit number followed by "V" and six digit checksum)
; Pass in the 2nd piece of this variable the type of identifier:
; SS = Social Security number
; PI = VA MPI Integration Control Number
; MR = medical record number of patient in file PATIENT/IHS (#9000001)
; Example: 1000720100V271387^PI
; 123456789^SS
; 123456789^MR
;
; LA7SDT = start date of query (FileMan D/T,time optional)
; LA7EDT = end date of query (FileMan D/T, time optional)
; (FileMan D/T^type of date ("CD" or "RAD")
; Both start and end date values can pass a parameter in the second piece to indicate that the date values are for specimen collection date/time (CD) or results available date (RAD)
; Example: LA7SDT="2991001.1239^CD"
; LA7EDT="2991002.0331^CD"
; LA7SDT="3010201^RAD"
; LA7EDT="3010201^RAD"
;
; LA7SC = Array of search codes, either NLT or LOINC (code^coding system ("NLT" or "LN");
; Example: LA7SC(1)="89628.0000^NLT"
; LA7SC(2)="84330.0000^NLT"
; LA7SC(3)="84295.0000^NLT"
; LA7SC(4)="14749-6^LN"
;
; = The "*" (wildcard) for any code;
; Example: LA7SC="*"
;
; = A list of subscripts (separated by commas) from where the results will be extracted ("CH", "MI", "SP", "EM", "CY").
; Example: LA7SC="CH,MI" (CH and MI results only)
;
; Pass in the 2nd piece of LA7SC the indicator (1) to return VUID when available.
; Example: LA7SC="*^1) or LA7SC="CH,MI^1"
;
; LA7SPEC = array of specimen types using HL7 source table 0070 or "*" (wildcard) for any code
; Currently specimen type only supported for CH and MI subscripted tests.
; Example: LA7SPEC="*"
; or
; LA7SPEC(1)="UR"
; LA7SPEC(2)="SER"
; LA7SPEC(3)="PLAS"
;
; LA7QERR = array (by reference) to return any errors
;
; LA7DEST = closed root global reference to return search results (optional). If this parameter is omitted or equals an empty string, then node ^TMP("HLS",$J) is used.
; Example: LA7DEST=$NA(^TMP("ZZTMP",$J))
;
; LA7HL7 = HL7 field separator and encoding characters (4) to use to encode results (optional).
; If undefined or incomplete (length<5) then uses field separator = "|" and encoding characters ="^\~&"
;
; Returns LA7DEST = contains global reference of search results in HL7 message structure, usually ^TMP("HLS",$J)
;
; LA7QERR = array (by reference) containing any errors
;
N DFN,DIQUIET,LA761,LA76248,LA7CODE,LA7INTYP,LA7NLT,LA7NOMSG,LA7PTYP,LA7QUIT,LA7SCDE,LA7X,LRDFN,LRIDT,LRSS,LRSSLST
;
D CLEANUP
S U="^",DT=$$DT^XLFDT,DTIME=$$DTIME^XUP($G(DUZ))
S GBL=$S($G(LA7DEST)'="":LA7DEST,1:"^TMP(""HLS"","_$J_")")
K LA7QERR
; Prevent FileMan from issuing any unwanted WRITE(s).
S DIQUIET=1
; Currently not using file #62.48 for configuration information.
S (LA76248,LA7INTYP)=0
;
; Setup DUZ array to 'non-human' user LRLAB,HL if DUZ not valid
; Handle calls from non-VistA packages.
I $G(DUZ)<1 D
. S LA7X=$$FIND1^DIC(200,"","OX","LRLAB,HL","B","")
. I LA7X<1 D Q
. D DUZ^XUP(LA7X)
;
; Identify patient, quit if error
D PATID^LA7QRY2
I $D(LA7QERR) Q ""
;
; Move LA7SC into local variable to check and modify if necessary.
M LA7SCDE=LA7SC
;
; Resolve search codes to lab datanames
S LA7SCDE=$G(LA7SCDE)
;
; Set flag to return VUID when available
I $P(LA7SCDE,"^",2)=1 S LA7INTYP=30
;
; Parse list of subscripts if any.
D SCLIST^LA7QRY2($P(LA7SCDE,"^"),.LRSSLST)
Q:$D(LA7QERR) ""
;
; If passing specific subscripts but no specific search codes then use wildcard ("*") for search codes.
I LA7SCDE'="",$P(LA7SCDE,"^")'="*",'$O(LA7SCDE(0)) S $P(LA7SCDE,"^")="*"
I $P(LA7SCDE,"^")'="*",$O(LA7SCDE(0)) D CHKSC^LA7QRY1
;
; Convert specimen codes to file #61 Topography entries
S LA7SPEC=$G(LA7SPEC)
I LA7SPEC'="*" D SPEC^LA7QRY1
;
; Search by collection or results available date
I $P(LA7SDT,"^",2)="" S $P(LA7SDT,"^",2)="CD"
I $P(LA7SDT,"^",2)="RAD" D BRAD^LA7QRY2
I $P(LA7SDT,"^",2)="CD" D BCD^LA7QRY2
;
I '$D(^TMP("LA7-QRY",$J)) D
. S LA7QERR(99)="No results found for requested parameters"
. S GBL=""
E S LA7NOMSG=1 D BUILDMSG^LA7QRY1
;
D CLEANUP
;
Q GBL
;
;
CLEANUP ; Cleanup TMP nodes that are used.
;
N I
F I="LA7-61","LA7-DN","LA7-INST-DNS","LA7-LN","LA7-NLT","LA7-QRY" K ^TMP(I,$J)
D KVAR^LRX
;
Q
LA7QRY ;VA/DALOI/JMC - Lab HL7 Query Utility ; 13-Aug-2013 09:09 ; MKK
+1 ;;5.2;AUTOMATED LAB INSTRUMENTS;**46,1018,69,1027,68,1033**;NOV 1, 1997
+2 ;
+3 ; Reference to variable DIQUIET supported by DBIA #2098
+4 ; Reference to ^DPT("SSN") global supported by DBIA #10035
+5 ;
+6 QUIT
+7 ;
GCPR(LA7PTID,LA7SDT,LA7EDT,LA7SC,LA7SPEC,LA7QERR,LA7DEST,LA7HL7) ; Entry point for Government Computerized Patient Record query
+1 ;
+2 ; Call with LA7PTID = patient identifier, either SSN or MPI/ICN or medical record number.
+3 ; if MPI/ICN then should be full ICN (10 digit number followed by "V" and six digit checksum)
+4 ; Pass in the 2nd piece of this variable the type of identifier:
+5 ; SS = Social Security number
+6 ; PI = VA MPI Integration Control Number
+7 ; MR = medical record number of patient in file PATIENT/IHS (#9000001)
+8 ; Example: 1000720100V271387^PI
+9 ; 123456789^SS
+10 ; 123456789^MR
+11 ;
+12 ; LA7SDT = start date of query (FileMan D/T,time optional)
+13 ; LA7EDT = end date of query (FileMan D/T, time optional)
+14 ; (FileMan D/T^type of date ("CD" or "RAD")
+15 ; Both start and end date values can pass a parameter in the second piece to indicate that the date values are for specimen collection date/time (CD) or results available date (RAD)
+16 ; Example: LA7SDT="2991001.1239^CD"
+17 ; LA7EDT="2991002.0331^CD"
+18 ; LA7SDT="3010201^RAD"
+19 ; LA7EDT="3010201^RAD"
+20 ;
+21 ; LA7SC = Array of search codes, either NLT or LOINC (code^coding system ("NLT" or "LN");
+22 ; Example: LA7SC(1)="89628.0000^NLT"
+23 ; LA7SC(2)="84330.0000^NLT"
+24 ; LA7SC(3)="84295.0000^NLT"
+25 ; LA7SC(4)="14749-6^LN"
+26 ;
+27 ; = The "*" (wildcard) for any code;
+28 ; Example: LA7SC="*"
+29 ;
+30 ; = A list of subscripts (separated by commas) from where the results will be extracted ("CH", "MI", "SP", "EM", "CY").
+31 ; Example: LA7SC="CH,MI" (CH and MI results only)
+32 ;
+33 ; Pass in the 2nd piece of LA7SC the indicator (1) to return VUID when available.
+34 ; Example: LA7SC="*^1) or LA7SC="CH,MI^1"
+35 ;
+36 ; LA7SPEC = array of specimen types using HL7 source table 0070 or "*" (wildcard) for any code
+37 ; Currently specimen type only supported for CH and MI subscripted tests.
+38 ; Example: LA7SPEC="*"
+39 ; or
+40 ; LA7SPEC(1)="UR"
+41 ; LA7SPEC(2)="SER"
+42 ; LA7SPEC(3)="PLAS"
+43 ;
+44 ; LA7QERR = array (by reference) to return any errors
+45 ;
+46 ; LA7DEST = closed root global reference to return search results (optional). If this parameter is omitted or equals an empty string, then node ^TMP("HLS",$J) is used.
+47 ; Example: LA7DEST=$NA(^TMP("ZZTMP",$J))
+48 ;
+49 ; LA7HL7 = HL7 field separator and encoding characters (4) to use to encode results (optional).
+50 ; If undefined or incomplete (length<5) then uses field separator = "|" and encoding characters ="^\~&"
+51 ;
+52 ; Returns LA7DEST = contains global reference of search results in HL7 message structure, usually ^TMP("HLS",$J)
+53 ;
+54 ; LA7QERR = array (by reference) containing any errors
+55 ;
+56 NEW DFN,DIQUIET,LA761,LA76248,LA7CODE,LA7INTYP,LA7NLT,LA7NOMSG,LA7PTYP,LA7QUIT,LA7SCDE,LA7X,LRDFN,LRIDT,LRSS,LRSSLST
+57 ;
+58 DO CLEANUP
+59 SET U="^"
SET DT=$$DT^XLFDT
SET DTIME=$$DTIME^XUP($GET(DUZ))
+60 SET GBL=$SELECT($GET(LA7DEST)'="":LA7DEST,1:"^TMP(""HLS"","_$JOB_")")
+61 KILL LA7QERR
+62 ; Prevent FileMan from issuing any unwanted WRITE(s).
+63 SET DIQUIET=1
+64 ; Currently not using file #62.48 for configuration information.
+65 SET (LA76248,LA7INTYP)=0
+66 ;
+67 ; Setup DUZ array to 'non-human' user LRLAB,HL if DUZ not valid
+68 ; Handle calls from non-VistA packages.
+69 IF $GET(DUZ)<1
Begin DoDot:1
+70 SET LA7X=$$FIND1^DIC(200,"","OX","LRLAB,HL","B","")
+71 IF LA7X<1
Begin DoDot:2
End DoDot:2
QUIT
+72 DO DUZ^XUP(LA7X)
End DoDot:1
+73 ;
+74 ; Identify patient, quit if error
+75 DO PATID^LA7QRY2
+76 IF $DATA(LA7QERR)
QUIT ""
+77 ;
+78 ; Move LA7SC into local variable to check and modify if necessary.
+79 MERGE LA7SCDE=LA7SC
+80 ;
+81 ; Resolve search codes to lab datanames
+82 SET LA7SCDE=$GET(LA7SCDE)
+83 ;
+84 ; Set flag to return VUID when available
+85 IF $PIECE(LA7SCDE,"^",2)=1
SET LA7INTYP=30
+86 ;
+87 ; Parse list of subscripts if any.
+88 DO SCLIST^LA7QRY2($PIECE(LA7SCDE,"^"),.LRSSLST)
+89 IF $DATA(LA7QERR)
QUIT ""
+90 ;
+91 ; If passing specific subscripts but no specific search codes then use wildcard ("*") for search codes.
+92 IF LA7SCDE'=""
IF $PIECE(LA7SCDE,"^")'="*"
IF '$ORDER(LA7SCDE(0))
SET $PIECE(LA7SCDE,"^")="*"
+93 IF $PIECE(LA7SCDE,"^")'="*"
IF $ORDER(LA7SCDE(0))
DO CHKSC^LA7QRY1
+94 ;
+95 ; Convert specimen codes to file #61 Topography entries
+96 SET LA7SPEC=$GET(LA7SPEC)
+97 IF LA7SPEC'="*"
DO SPEC^LA7QRY1
+98 ;
+99 ; Search by collection or results available date
+100 IF $PIECE(LA7SDT,"^",2)=""
SET $PIECE(LA7SDT,"^",2)="CD"
+101 IF $PIECE(LA7SDT,"^",2)="RAD"
DO BRAD^LA7QRY2
+102 IF $PIECE(LA7SDT,"^",2)="CD"
DO BCD^LA7QRY2
+103 ;
+104 IF '$DATA(^TMP("LA7-QRY",$JOB))
Begin DoDot:1
+105 SET LA7QERR(99)="No results found for requested parameters"
+106 SET GBL=""
End DoDot:1
+107 IF '$TEST
SET LA7NOMSG=1
DO BUILDMSG^LA7QRY1
+108 ;
+109 DO CLEANUP
+110 ;
+111 QUIT GBL
+112 ;
+113 ;
CLEANUP ; Cleanup TMP nodes that are used.
+1 ;
+2 NEW I
+3 FOR I="LA7-61","LA7-DN","LA7-INST-DNS","LA7-LN","LA7-NLT","LA7-QRY"
KILL ^TMP(I,$JOB)
+4 DO KVAR^LRX
+5 ;
+6 QUIT