RORUTL16 ;HCIOFO/SG - PHARMACY DATA SEARCH (UTILITIES) ; 10/6/05 9:34am
;;1.5;CLINICAL CASE REGISTRIES;**32**;Feb 17, 2006;Build 20
;
; This routine uses the following IAs:
;
; #4533 AND^PSS50, VAC^PSS50 (supported)
; #4543 IEN^PSN50P65 (supported)
;
Q
;
;***** LOADS THE LIST OF REGISTRY SPECIFIC DRUGS
;
; ROR8DST Closed root of the destination buffer
;
; REGIEN Registry IEN
;
; [FLAGS] Flags to control processing:
; A Do not kill the destination array before
; loading the drugs (Add the drugs)
; C Include VA drug classes from the file #798.6
; D Include local (dispensed) drugs from the LOCAL
; DRUG NAME multiple of the file #798.1
; G Include generic drugs from the file #799.51
; R Reduce everything to local (dispensed) drugs
;
; If this parameter has no value ($G(FLAGS)="") then
; the default set of flags is used: "DGR".
;
; [GROUPID] Optional identifier of the drug group. By default
; ($G(GROUPID)=""), 0 is used.
;
; Return Values:
; <0 Error code
; 0 Ok
;
; The list of drugs is returned as follow:
;
; @ROR8DST@(
; DrugIEN,
; GroupID) ""
; "C",
; VAClassIEN,
; GroupID) ""
; "G",
; GenericDrugIEN,
; GroupID) ""
;
; DrugIEN is an internal entry number of the local drug record
; in the DRUG file (#50).
;
; Nodes "C" and/or "G" are created only if the R flag is not used.
; Otherwise, VA drug classes and generic drugs are reduced to the
; local (dispensed) drugs.
;
DRUGLIST(ROR8DST,REGIEN,FLAGS,GROUPID) ;
N DRUGIEN,IEN,NDFP,RC,REDUCE,ROOT,RORMSG,VACLIEN
S FLAGS=$S($G(FLAGS)'="":FLAGS,1:"DGR")
S GROUPID=$S($G(GROUPID)'="":GROUPID,1:0)
S REDUCE=(FLAGS["R") K:FLAGS'["A" @ROR8DST
;
;--- Drug classes
D:FLAGS["C"
. S IEN=0
. F S IEN=$O(^ROR(798.6,"AC",REGIEN,IEN)) Q:IEN'>0 D
. . D RXADDVCL(ROR8DST,+$G(^ROR(798.6,IEN,0)),REDUCE,GROUPID)
;
;--- Local drug names
D:FLAGS["D"
. S ROOT=$$ROOT^DILFD(798.129,","_REGIEN_",",1)
. S IEN=0
. F S IEN=$O(@ROOT@(IEN)) Q:IEN'>0 D
. . S DRUGIEN=+$P($G(@ROOT@(IEN,0)),U)
. . S:DRUGIEN>0 @ROR8DST@(DRUGIEN,GROUPID)=""
;
;--- Generic drugs
D:FLAGS["G"
. N RGS S RGS=REGIEN_"#",DRUGIEN=0
. F S DRUGIEN=$O(^ROR(799.51,"ARDG",RGS,DRUGIEN)) Q:DRUGIEN'>0 D
. . D RXADDGEN(ROR8DST,DRUGIEN,REDUCE,GROUPID)
Q 0
;
;***** LOADS PHARMACY ORDER DATA
;
; .ROR8DST Reference to the ROR8DST parameter
; passed into the callback function.
;
; ORDFLGS Flags describing the original order
;
; Return Values:
; <0 Error code
; 0 Ok
; 1 Skip this refill
;
ORDER(ROR8DST,ORDFLGS) ;
N DATE,FILLTYPE
D:ORDFLGS["I"
. S DATE=$P(RORRXE(0),U,5),FILLTYPE="I"
D:ORDFLGS["O"
. S DATE=$P(RORRXE("RXN",0),U,6)
. S FILLTYPE=$P(RORRXE("RXN",0),U,3)
Q
;
;***** ADDS THE GENERIC DRUG TO THE LIST OF DRUGS
;
; ROR8DST Closed root of the destination buffer
;
; GENIEN IEN of a generic drug
;
; [REDUCE] Reduce the class to a list of local drugs
;
; [GROUPID] Drug group ID
;
RXADDGEN(ROR8DST,GENIEN,REDUCE,GROUPID) ;
Q:GENIEN'>0
S GROUPID=$S($G(GROUPID)'="":GROUPID,1:0)
I '$G(REDUCE) S @ROR8DST@("G",GENIEN,GROUPID)="" Q
N DRUGIEN,RORTMP,RORTS
S RORTMP=$$ALLOC^RORTMP(.RORTS)
D AND^PSS50(GENIEN,,,RORTS)
S DRUGIEN=0
F S DRUGIEN=$O(@RORTMP@(DRUGIEN)) Q:DRUGIEN'>0 D
. S @ROR8DST@(DRUGIEN,GROUPID)=""
D XDRG^RORUTL22(GENIEN,GROUPID)
D FREE^RORTMP(RORTMP)
Q
;
;***** ADDS THE VA DRUG CLASS TO THE LIST OF DRUGS
;
; ROR8DST Closed root of the destination buffer
;
; VACL Either IEN or code of a VA drug class
;
; [REDUCE] Reduce the class to a list of local drugs
;
; [GROUPID] Drug group ID
;
; [FLAGS] Flags to control processing:
; E Always treat content of the VACL parameter as
; a code of the VA Drug Class (instead of IEN)
;
RXADDVCL(ROR8DST,VACL,REDUCE,GROUPID,FLAGS) ;
N DRUGIEN,RORMSG,RORTMP,RORTS,TMP,VACLIEN
S RORTMP=$$ALLOC^RORTMP(.RORTS)
D
. S VACLIEN=+VACL
. I (VACLIEN'=VACL)!($G(FLAGS)["E") D
. . D IEN^PSN50P65(,VACL,RORTS)
. . S TMP=+$G(@RORTMP@(0))
. . S VACLIEN=$S(TMP=1:+$O(@RORTMP@(0)),1:0)
. Q:VACLIEN'>0
. ;---
. S GROUPID=$S($G(GROUPID)'="":GROUPID,1:0)
. I '$G(REDUCE) S @ROR8DST@("C",VACLIEN,GROUPID)="" Q
. D VAC^PSS50(VACLIEN,,,RORTS)
. S DRUGIEN=0
. F S DRUGIEN=$O(@RORTMP@(DRUGIEN)) Q:DRUGIEN'>0 D
. . S @ROR8DST@(DRUGIEN,GROUPID)=""
;
D FREE^RORTMP(RORTMP)
Q
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HRORUTL16 4851 printed Sep 15, 2024@21:08:21 Page 2
RORUTL16 ;HCIOFO/SG - PHARMACY DATA SEARCH (UTILITIES) ; 10/6/05 9:34am
+1 ;;1.5;CLINICAL CASE REGISTRIES;**32**;Feb 17, 2006;Build 20
+2 ;
+3 ; This routine uses the following IAs:
+4 ;
+5 ; #4533 AND^PSS50, VAC^PSS50 (supported)
+6 ; #4543 IEN^PSN50P65 (supported)
+7 ;
+8 QUIT
+9 ;
+10 ;***** LOADS THE LIST OF REGISTRY SPECIFIC DRUGS
+11 ;
+12 ; ROR8DST Closed root of the destination buffer
+13 ;
+14 ; REGIEN Registry IEN
+15 ;
+16 ; [FLAGS] Flags to control processing:
+17 ; A Do not kill the destination array before
+18 ; loading the drugs (Add the drugs)
+19 ; C Include VA drug classes from the file #798.6
+20 ; D Include local (dispensed) drugs from the LOCAL
+21 ; DRUG NAME multiple of the file #798.1
+22 ; G Include generic drugs from the file #799.51
+23 ; R Reduce everything to local (dispensed) drugs
+24 ;
+25 ; If this parameter has no value ($G(FLAGS)="") then
+26 ; the default set of flags is used: "DGR".
+27 ;
+28 ; [GROUPID] Optional identifier of the drug group. By default
+29 ; ($G(GROUPID)=""), 0 is used.
+30 ;
+31 ; Return Values:
+32 ; <0 Error code
+33 ; 0 Ok
+34 ;
+35 ; The list of drugs is returned as follow:
+36 ;
+37 ; @ROR8DST@(
+38 ; DrugIEN,
+39 ; GroupID) ""
+40 ; "C",
+41 ; VAClassIEN,
+42 ; GroupID) ""
+43 ; "G",
+44 ; GenericDrugIEN,
+45 ; GroupID) ""
+46 ;
+47 ; DrugIEN is an internal entry number of the local drug record
+48 ; in the DRUG file (#50).
+49 ;
+50 ; Nodes "C" and/or "G" are created only if the R flag is not used.
+51 ; Otherwise, VA drug classes and generic drugs are reduced to the
+52 ; local (dispensed) drugs.
+53 ;
DRUGLIST(ROR8DST,REGIEN,FLAGS,GROUPID) ;
+1 NEW DRUGIEN,IEN,NDFP,RC,REDUCE,ROOT,RORMSG,VACLIEN
+2 SET FLAGS=$SELECT($GET(FLAGS)'="":FLAGS,1:"DGR")
+3 SET GROUPID=$SELECT($GET(GROUPID)'="":GROUPID,1:0)
+4 SET REDUCE=(FLAGS["R")
if FLAGS'["A"
KILL @ROR8DST
+5 ;
+6 ;--- Drug classes
+7 if FLAGS["C"
Begin DoDot:1
+8 SET IEN=0
+9 FOR
SET IEN=$ORDER(^ROR(798.6,"AC",REGIEN,IEN))
if IEN'>0
QUIT
Begin DoDot:2
+10 DO RXADDVCL(ROR8DST,+$GET(^ROR(798.6,IEN,0)),REDUCE,GROUPID)
End DoDot:2
End DoDot:1
+11 ;
+12 ;--- Local drug names
+13 if FLAGS["D"
Begin DoDot:1
+14 SET ROOT=$$ROOT^DILFD(798.129,","_REGIEN_",",1)
+15 SET IEN=0
+16 FOR
SET IEN=$ORDER(@ROOT@(IEN))
if IEN'>0
QUIT
Begin DoDot:2
+17 SET DRUGIEN=+$PIECE($GET(@ROOT@(IEN,0)),U)
+18 if DRUGIEN>0
SET @ROR8DST@(DRUGIEN,GROUPID)=""
End DoDot:2
End DoDot:1
+19 ;
+20 ;--- Generic drugs
+21 if FLAGS["G"
Begin DoDot:1
+22 NEW RGS
SET RGS=REGIEN_"#"
SET DRUGIEN=0
+23 FOR
SET DRUGIEN=$ORDER(^ROR(799.51,"ARDG",RGS,DRUGIEN))
if DRUGIEN'>0
QUIT
Begin DoDot:2
+24 DO RXADDGEN(ROR8DST,DRUGIEN,REDUCE,GROUPID)
End DoDot:2
End DoDot:1
+25 QUIT 0
+26 ;
+27 ;***** LOADS PHARMACY ORDER DATA
+28 ;
+29 ; .ROR8DST Reference to the ROR8DST parameter
+30 ; passed into the callback function.
+31 ;
+32 ; ORDFLGS Flags describing the original order
+33 ;
+34 ; Return Values:
+35 ; <0 Error code
+36 ; 0 Ok
+37 ; 1 Skip this refill
+38 ;
ORDER(ROR8DST,ORDFLGS) ;
+1 NEW DATE,FILLTYPE
+2 if ORDFLGS["I"
Begin DoDot:1
+3 SET DATE=$PIECE(RORRXE(0),U,5)
SET FILLTYPE="I"
End DoDot:1
+4 if ORDFLGS["O"
Begin DoDot:1
+5 SET DATE=$PIECE(RORRXE("RXN",0),U,6)
+6 SET FILLTYPE=$PIECE(RORRXE("RXN",0),U,3)
End DoDot:1
+7 QUIT
+8 ;
+9 ;***** ADDS THE GENERIC DRUG TO THE LIST OF DRUGS
+10 ;
+11 ; ROR8DST Closed root of the destination buffer
+12 ;
+13 ; GENIEN IEN of a generic drug
+14 ;
+15 ; [REDUCE] Reduce the class to a list of local drugs
+16 ;
+17 ; [GROUPID] Drug group ID
+18 ;
RXADDGEN(ROR8DST,GENIEN,REDUCE,GROUPID) ;
+1 if GENIEN'>0
QUIT
+2 SET GROUPID=$SELECT($GET(GROUPID)'="":GROUPID,1:0)
+3 IF '$GET(REDUCE)
SET @ROR8DST@("G",GENIEN,GROUPID)=""
QUIT
+4 NEW DRUGIEN,RORTMP,RORTS
+5 SET RORTMP=$$ALLOC^RORTMP(.RORTS)
+6 DO AND^PSS50(GENIEN,,,RORTS)
+7 SET DRUGIEN=0
+8 FOR
SET DRUGIEN=$ORDER(@RORTMP@(DRUGIEN))
if DRUGIEN'>0
QUIT
Begin DoDot:1
+9 SET @ROR8DST@(DRUGIEN,GROUPID)=""
End DoDot:1
+10 DO XDRG^RORUTL22(GENIEN,GROUPID)
+11 DO FREE^RORTMP(RORTMP)
+12 QUIT
+13 ;
+14 ;***** ADDS THE VA DRUG CLASS TO THE LIST OF DRUGS
+15 ;
+16 ; ROR8DST Closed root of the destination buffer
+17 ;
+18 ; VACL Either IEN or code of a VA drug class
+19 ;
+20 ; [REDUCE] Reduce the class to a list of local drugs
+21 ;
+22 ; [GROUPID] Drug group ID
+23 ;
+24 ; [FLAGS] Flags to control processing:
+25 ; E Always treat content of the VACL parameter as
+26 ; a code of the VA Drug Class (instead of IEN)
+27 ;
RXADDVCL(ROR8DST,VACL,REDUCE,GROUPID,FLAGS) ;
+1 NEW DRUGIEN,RORMSG,RORTMP,RORTS,TMP,VACLIEN
+2 SET RORTMP=$$ALLOC^RORTMP(.RORTS)
+3 Begin DoDot:1
+4 SET VACLIEN=+VACL
+5 IF (VACLIEN'=VACL)!($GET(FLAGS)["E")
Begin DoDot:2
+6 DO IEN^PSN50P65(,VACL,RORTS)
+7 SET TMP=+$GET(@RORTMP@(0))
+8 SET VACLIEN=$SELECT(TMP=1:+$ORDER(@RORTMP@(0)),1:0)
End DoDot:2
+9 if VACLIEN'>0
QUIT
+10 ;---
+11 SET GROUPID=$SELECT($GET(GROUPID)'="":GROUPID,1:0)
+12 IF '$GET(REDUCE)
SET @ROR8DST@("C",VACLIEN,GROUPID)=""
QUIT
+13 DO VAC^PSS50(VACLIEN,,,RORTS)
+14 SET DRUGIEN=0
+15 FOR
SET DRUGIEN=$ORDER(@RORTMP@(DRUGIEN))
if DRUGIEN'>0
QUIT
Begin DoDot:2
+16 SET @ROR8DST@(DRUGIEN,GROUPID)=""
End DoDot:2
End DoDot:1
+17 ;
+18 DO FREE^RORTMP(RORTMP)
+19 QUIT