RORUTL14 ;HCIOFO/BH,SG - PHARMACY DATA SEARCH ; 12/13/05 2:16pm
;;1.5;CLINICAL CASE REGISTRIES;**28**;Feb 17, 2006;Build 66
;
;
;******************************************************************************
;PKG/PATCH DATE DEVELOPER MODIFICATION
;----------- ---------- ----------- ----------------------------------------
;ROR*1.5*28 APR 2016 T KOPP Document DAA/in house parameter.
;******************************************************************************
Q
;
;***** SEARCHES THE PHARMACY DATA
;
; PATIEN IEN of the patient (DFN)
;
; ROR8RXS Closed root of a variable, which contains a list
; of drugs of interest (in the same format as
; the list returned by the $$DRUGLIST^RORUTL16).
;
; If the "*" is passed via this parameter then all
; pharmacy orders tests are considered.
;
; If this parameter has a pure numeric value then
; it is considered as registry IEN and the default
; list of registry specific drugs is automatically
; compiled by the $$DRUGLIST^RORUTL16 function.
;
; [[.]ROR8DST] Closed root of an array where the data will be
; returned (the ^TMP("RORUTL14",$J), by default).
; The data will be stored into the destination
; array in following format:
;
; @ROR8DST@(i, Additional drug information
; ^01: Order number
; ^02: Flags describing the order:
; I Inpatient dose
; O Outpatient fill
; P Pending
; V IV
; ^03: Generic drug IEN (file #50.6)
; ^04: Generic drug name
; ^05: Drug class IEN (file #50.605)
; ^06: Drug class code
; 0) Detailed information on pharmacy
; "RXN",0) order loaded by the OEL^PSOORRL
; ...
;
; Example:
; S RORDST=$NA(^TMP("RORTMP",$J))
; S RC=$$RXSEARCH^RORUTL14(DFN,REGIEN,RORDST)
;
; If this parameter is passed by reference, you can
; provide a full name ($$TAG^ROUTINE) of the callback
; function, which will process and store the results,
; as the value of the "RORCB" node.
;
; Any additional nodes created in this variable will
; be accessible in the callback function. The following
; nodes are created automatically:
;
; "RORDFN" IEN of the registry patient (DFN)
;
; "ROREDT" End date
;
; "RORFLAGS" Value of parameter of the same name
;
; "RORSDT" Start date
;
; "RORXGEN" Generic drug
; ^01: Drug IEN in file #50.6
; ^02: Generic drug name
;
; "RORXVCL" VA Drug class
; ^01: Class IEN in file #50.605
; ^02: Class code
;
; The callback function must accept 5 parameters:
;
; .ROR8DST Reference to the ROR8DST parameter
; passed into the $$RXSEARCH function.
;
; ORDER Order number (from condensed list)
;
; FLAGS Flags describing the order to be
; processed.
;
; DRUG Dispensed drug
; ^01: Drug IEN in file #50
; ^02: Drug name
;
; DATE Order date (issue date for outpatient
; drugs or start date for inpatient)
;
; The ^TMP("PS",$J) global node contains the data
; returned by the OEL^PSOORRL procedure (see the
; DBIA #2400 for details).
;
; The callback function is called for each additive
; included in the IV order; the ^TMP("PS",$J) is
; loaded once and stays the same for all of them.
;
; The function should return the following values:
;
; <0 Error code (the search will be aborted)
; 0 Ok
; 1 Skip this pharmacy order
; 2 Skip this and all remaining orders
;
; Example:
; S RORDST=$NA(^TMP("RORBUF",$J))
; S RORDST("RORPTR")=+$O(@RORDST@(""),-1)
; S RORDST("RORCB")="$$RXCB^RORUT999"
; S RC=$$RXSEARCH^RORUTL14(DFN,REGIEN,.RORDST)
;
; [RORFLAGS] Flags to control processing:
; E Load external values for additional fields
; stored into the output array or passed to
; the callback function. Affected fields
; have the (E) marker.
; I Include inpatient doses
; O Include outpatient fills
; P Include pending orders
; V Include IV
; C Include only DAA Drug (remarks contains CHOICE)
; H Include only In-house drug (remarks doesn't contain CHOICE)
;
; If this parameter has no value ($G(RORFLAGS)="")
; then the default set of flags is used: "IO".
;
; RORSDT Start date (FileMan)
; [ROREDT] End date (FileMan)
;
; The search is performed exactly between provided
; boundaries (the time parts are considered).
;
; The following global nodes are used by the function:
;
; ^TMP("PS",$J) The OCL^PSOORRL and OEL^PSOORRL procedures
; return the results into this node.
;
; ^TMP("RORUTL14",$J) If the name of the destination array is
; not provided via the ROR8DST parameter
; then the $$RXSEARCH returns the results
; under this node.
;
; ^TMP("RORUTL14L",$J) If the ROR8RXS parameter is undefined
; then a temporary list of registry specific
; drugs is compiled under this node.
;
; Return Values:
; <0 Error code
; 0 No ordes have been found
; >0 Number of pharmacy orders
;
RXSEARCH(PATIEN,ROR8RXS,ROR8DST,RORFLAGS,RORSDT,ROREDT) ;
N RC,ROR8SET,RORXLST,TMP
S:$G(ROR8DST)="" ROR8DST=$NA(^TMP("RORUTL14",$J))
S RORFLAGS=$S($G(RORFLAGS)'="":RORFLAGS,1:"IO")
Q:$TR(RORFLAGS,"IO")=RORFLAGS 0 ; Neither Inpatient nor Outpatient
Q:$G(ROR8RXS)="" 0 ; No drugs to search for
;---
S:$G(ROREDT)'>0 ROREDT=DT
S RORXLST=$$ALLOC^RORTMP(),RC=0
;
D
. ;--- Prepare the list of drugs of interest
. I (+ROR8RXS)=ROR8RXS D Q:RC'>0
. . S TMP=ROR8RXS,ROR8RXS=$$ALLOC^RORTMP()
. . S RC=$$DRUGLIST^RORUTL16(ROR8RXS,TMP)
. I ROR8RXS'="*",$D(@ROR8RXS)<10 S RC=0 Q
. ;--- Preselect pharmacy orders
. S RC=$$QUERY^RORUTL15(PATIEN,RORFLAGS,RORSDT,ROREDT,RORXLST)
. Q:RC'>0
. ;--- Process selected orders
. S RC=$$PROCESS^RORUTL15(PATIEN,RORFLAGS,RORXLST)
. Q:RC'>0
;
;--- Cleanup
D POP^RORTMP(RORXLST)
Q RC
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HRORUTL14 7736 printed Dec 13, 2024@01:44:05 Page 2
RORUTL14 ;HCIOFO/BH,SG - PHARMACY DATA SEARCH ; 12/13/05 2:16pm
+1 ;;1.5;CLINICAL CASE REGISTRIES;**28**;Feb 17, 2006;Build 66
+2 ;
+3 ;
+4 ;******************************************************************************
+5 ;PKG/PATCH DATE DEVELOPER MODIFICATION
+6 ;----------- ---------- ----------- ----------------------------------------
+7 ;ROR*1.5*28 APR 2016 T KOPP Document DAA/in house parameter.
+8 ;******************************************************************************
+9 QUIT
+10 ;
+11 ;***** SEARCHES THE PHARMACY DATA
+12 ;
+13 ; PATIEN IEN of the patient (DFN)
+14 ;
+15 ; ROR8RXS Closed root of a variable, which contains a list
+16 ; of drugs of interest (in the same format as
+17 ; the list returned by the $$DRUGLIST^RORUTL16).
+18 ;
+19 ; If the "*" is passed via this parameter then all
+20 ; pharmacy orders tests are considered.
+21 ;
+22 ; If this parameter has a pure numeric value then
+23 ; it is considered as registry IEN and the default
+24 ; list of registry specific drugs is automatically
+25 ; compiled by the $$DRUGLIST^RORUTL16 function.
+26 ;
+27 ; [[.]ROR8DST] Closed root of an array where the data will be
+28 ; returned (the ^TMP("RORUTL14",$J), by default).
+29 ; The data will be stored into the destination
+30 ; array in following format:
+31 ;
+32 ; @ROR8DST@(i, Additional drug information
+33 ; ^01: Order number
+34 ; ^02: Flags describing the order:
+35 ; I Inpatient dose
+36 ; O Outpatient fill
+37 ; P Pending
+38 ; V IV
+39 ; ^03: Generic drug IEN (file #50.6)
+40 ; ^04: Generic drug name
+41 ; ^05: Drug class IEN (file #50.605)
+42 ; ^06: Drug class code
+43 ; 0) Detailed information on pharmacy
+44 ; "RXN",0) order loaded by the OEL^PSOORRL
+45 ; ...
+46 ;
+47 ; Example:
+48 ; S RORDST=$NA(^TMP("RORTMP",$J))
+49 ; S RC=$$RXSEARCH^RORUTL14(DFN,REGIEN,RORDST)
+50 ;
+51 ; If this parameter is passed by reference, you can
+52 ; provide a full name ($$TAG^ROUTINE) of the callback
+53 ; function, which will process and store the results,
+54 ; as the value of the "RORCB" node.
+55 ;
+56 ; Any additional nodes created in this variable will
+57 ; be accessible in the callback function. The following
+58 ; nodes are created automatically:
+59 ;
+60 ; "RORDFN" IEN of the registry patient (DFN)
+61 ;
+62 ; "ROREDT" End date
+63 ;
+64 ; "RORFLAGS" Value of parameter of the same name
+65 ;
+66 ; "RORSDT" Start date
+67 ;
+68 ; "RORXGEN" Generic drug
+69 ; ^01: Drug IEN in file #50.6
+70 ; ^02: Generic drug name
+71 ;
+72 ; "RORXVCL" VA Drug class
+73 ; ^01: Class IEN in file #50.605
+74 ; ^02: Class code
+75 ;
+76 ; The callback function must accept 5 parameters:
+77 ;
+78 ; .ROR8DST Reference to the ROR8DST parameter
+79 ; passed into the $$RXSEARCH function.
+80 ;
+81 ; ORDER Order number (from condensed list)
+82 ;
+83 ; FLAGS Flags describing the order to be
+84 ; processed.
+85 ;
+86 ; DRUG Dispensed drug
+87 ; ^01: Drug IEN in file #50
+88 ; ^02: Drug name
+89 ;
+90 ; DATE Order date (issue date for outpatient
+91 ; drugs or start date for inpatient)
+92 ;
+93 ; The ^TMP("PS",$J) global node contains the data
+94 ; returned by the OEL^PSOORRL procedure (see the
+95 ; DBIA #2400 for details).
+96 ;
+97 ; The callback function is called for each additive
+98 ; included in the IV order; the ^TMP("PS",$J) is
+99 ; loaded once and stays the same for all of them.
+100 ;
+101 ; The function should return the following values:
+102 ;
+103 ; <0 Error code (the search will be aborted)
+104 ; 0 Ok
+105 ; 1 Skip this pharmacy order
+106 ; 2 Skip this and all remaining orders
+107 ;
+108 ; Example:
+109 ; S RORDST=$NA(^TMP("RORBUF",$J))
+110 ; S RORDST("RORPTR")=+$O(@RORDST@(""),-1)
+111 ; S RORDST("RORCB")="$$RXCB^RORUT999"
+112 ; S RC=$$RXSEARCH^RORUTL14(DFN,REGIEN,.RORDST)
+113 ;
+114 ; [RORFLAGS] Flags to control processing:
+115 ; E Load external values for additional fields
+116 ; stored into the output array or passed to
+117 ; the callback function. Affected fields
+118 ; have the (E) marker.
+119 ; I Include inpatient doses
+120 ; O Include outpatient fills
+121 ; P Include pending orders
+122 ; V Include IV
+123 ; C Include only DAA Drug (remarks contains CHOICE)
+124 ; H Include only In-house drug (remarks doesn't contain CHOICE)
+125 ;
+126 ; If this parameter has no value ($G(RORFLAGS)="")
+127 ; then the default set of flags is used: "IO".
+128 ;
+129 ; RORSDT Start date (FileMan)
+130 ; [ROREDT] End date (FileMan)
+131 ;
+132 ; The search is performed exactly between provided
+133 ; boundaries (the time parts are considered).
+134 ;
+135 ; The following global nodes are used by the function:
+136 ;
+137 ; ^TMP("PS",$J) The OCL^PSOORRL and OEL^PSOORRL procedures
+138 ; return the results into this node.
+139 ;
+140 ; ^TMP("RORUTL14",$J) If the name of the destination array is
+141 ; not provided via the ROR8DST parameter
+142 ; then the $$RXSEARCH returns the results
+143 ; under this node.
+144 ;
+145 ; ^TMP("RORUTL14L",$J) If the ROR8RXS parameter is undefined
+146 ; then a temporary list of registry specific
+147 ; drugs is compiled under this node.
+148 ;
+149 ; Return Values:
+150 ; <0 Error code
+151 ; 0 No ordes have been found
+152 ; >0 Number of pharmacy orders
+153 ;
RXSEARCH(PATIEN,ROR8RXS,ROR8DST,RORFLAGS,RORSDT,ROREDT) ;
+1 NEW RC,ROR8SET,RORXLST,TMP
+2 if $GET(ROR8DST)=""
SET ROR8DST=$NAME(^TMP("RORUTL14",$JOB))
+3 SET RORFLAGS=$SELECT($GET(RORFLAGS)'="":RORFLAGS,1:"IO")
+4 ; Neither Inpatient nor Outpatient
if $TRANSLATE(RORFLAGS,"IO")=RORFLAGS
QUIT 0
+5 ; No drugs to search for
if $GET(ROR8RXS)=""
QUIT 0
+6 ;---
+7 if $GET(ROREDT)'>0
SET ROREDT=DT
+8 SET RORXLST=$$ALLOC^RORTMP()
SET RC=0
+9 ;
+10 Begin DoDot:1
+11 ;--- Prepare the list of drugs of interest
+12 IF (+ROR8RXS)=ROR8RXS
Begin DoDot:2
+13 SET TMP=ROR8RXS
SET ROR8RXS=$$ALLOC^RORTMP()
+14 SET RC=$$DRUGLIST^RORUTL16(ROR8RXS,TMP)
End DoDot:2
if RC'>0
QUIT
+15 IF ROR8RXS'="*"
IF $DATA(@ROR8RXS)<10
SET RC=0
QUIT
+16 ;--- Preselect pharmacy orders
+17 SET RC=$$QUERY^RORUTL15(PATIEN,RORFLAGS,RORSDT,ROREDT,RORXLST)
+18 if RC'>0
QUIT
+19 ;--- Process selected orders
+20 SET RC=$$PROCESS^RORUTL15(PATIEN,RORFLAGS,RORXLST)
+21 if RC'>0
QUIT
End DoDot:1
+22 ;
+23 ;--- Cleanup
+24 DO POP^RORTMP(RORXLST)
+25 QUIT RC