| [613] | 1 | RORXU007 ;HCIOFO/SG - PHARMACY-RELATED REPORT PARAMETERS ; 11/25/05 6:00pm
 | 
|---|
 | 2 |  ;;1.5;CLINICAL CASE REGISTRIES;;Feb 17, 2006
 | 
|---|
 | 3 |  ;
 | 
|---|
 | 4 |  ; This routine uses the following IAs:
 | 
|---|
 | 5 |  ;
 | 
|---|
 | 6 |  ; #4533         ZERO^PSS50 (supported)
 | 
|---|
 | 7 |  ; #4540         ZERO^PSN50P6 (supported)
 | 
|---|
 | 8 |  ; #4543         IEN^PSN50P65 (supported)
 | 
|---|
 | 9 |  ;
 | 
|---|
 | 10 |  Q
 | 
|---|
 | 11 |  ;
 | 
|---|
 | 12 |  ;***** PROCESSES THE "DRUGS" REPORT PARAMETER
 | 
|---|
 | 13 |  ;
 | 
|---|
 | 14 |  ; .RORTSK       Task number and task parameters
 | 
|---|
 | 15 |  ;
 | 
|---|
 | 16 |  ; PARTAG        Reference (IEN) to the parent tag
 | 
|---|
 | 17 |  ;
 | 
|---|
 | 18 |  ; .ROR8LST      Reference to a local variable, which contains a
 | 
|---|
 | 19 |  ;               closed root of an array. IEN's of dispensed drugs
 | 
|---|
 | 20 |  ;               will be returned into this array.
 | 
|---|
 | 21 |  ;
 | 
|---|
 | 22 |  ;                 @ROR8LTST@(DrugIEN,Group#) = ""
 | 
|---|
 | 23 |  ;
 | 
|---|
 | 24 |  ;               If this parameter is undefined or empty, then a
 | 
|---|
 | 25 |  ;               temporary buffer is allocated by the $$ALLOC^RORTMP
 | 
|---|
 | 26 |  ;               function and its root is returned via this parameter.
 | 
|---|
 | 27 |  ;
 | 
|---|
 | 28 |  ;               If all drugs are requested (the "ALL" attribute of
 | 
|---|
 | 29 |  ;               the "DRUGS" tag), then "*" is returned.
 | 
|---|
 | 30 |  ;
 | 
|---|
 | 31 |  ; [.GRPLST]     Reference to a local variable that will contain
 | 
|---|
 | 32 |  ;               the list of drug groups.
 | 
|---|
 | 33 |  ;
 | 
|---|
 | 34 |  ;                 GRPLST(
 | 
|---|
 | 35 |  ;                   "C",Group#)    = GroupName
 | 
|---|
 | 36 |  ;                   "N",GroupName) = Group#
 | 
|---|
 | 37 |  ;
 | 
|---|
 | 38 |  ; Return Values:
 | 
|---|
 | 39 |  ;       <0  Error code
 | 
|---|
 | 40 |  ;       >0  IEN of the DRUGS element
 | 
|---|
 | 41 |  ;
 | 
|---|
 | 42 | DRUGLST(RORTSK,PARTAG,ROR8LST,GRPLST) ;
 | 
|---|
 | 43 |  N LTAG,RC,RXALL,RXOPTS,TMP
 | 
|---|
 | 44 |  S RXALL=+$$PARAM^RORTSK01("DRUGS","ALL")
 | 
|---|
 | 45 |  S (LTAG,RC)=0
 | 
|---|
 | 46 |  ;
 | 
|---|
 | 47 |  ;=== Validate parameters
 | 
|---|
 | 48 |  I RXALL  D  S ROR8LST="*"
 | 
|---|
 | 49 |  . F TMP="INVESTIG","REGMDES"  K RORTSK("PARAMS","DRUGS","A",TMP)
 | 
|---|
 | 50 |  E  D  K @ROR8LST
 | 
|---|
 | 51 |  . S:$G(ROR8LST)="" ROR8LST=$$ALLOC^RORTMP()
 | 
|---|
 | 52 |  . ;--- Aggregate by individual formulations if investigational
 | 
|---|
 | 53 |  . ;--- medications are selected (they are not linked to generics)
 | 
|---|
 | 54 |  . D:$$PARAM^RORTSK01("DRUGS","AGGR_GENERIC")
 | 
|---|
 | 55 |  . . N GRPNAME,INV,NODE
 | 
|---|
 | 56 |  . . I '$$PARAM^RORTSK01("DRUGS","INVESTIG")  S INV=0  D  Q:'INV
 | 
|---|
 | 57 |  . . . S NODE=$NA(RORTSK("PARAMS","DRUGS","G"))
 | 
|---|
 | 58 |  . . . S GRPNAME=""
 | 
|---|
 | 59 |  . . . F  S GRPNAME=$O(@NODE@(GRPNAME))  Q:GRPNAME=""  D  Q:INV
 | 
|---|
 | 60 |  . . . . S:$G(@NODE@(GRPNAME,"A","INVESTIG")) INV=1
 | 
|---|
 | 61 |  . . K RORTSK("PARAMS","DRUGS","A","AGGR_GENERIC")
 | 
|---|
 | 62 |  . . S RORTSK("PARAMS","DRUGS","A","AGGR_FORMUL")=1
 | 
|---|
 | 63 |  . . S RORTSK("PARAMS","DRUGS","A","AGGR_FORCED")=1
 | 
|---|
 | 64 |  ;
 | 
|---|
 | 65 |  ;=== Process the drug options (if present)
 | 
|---|
 | 66 |  M RXOPTS=RORTSK("PARAMS","DRUGS","A")
 | 
|---|
 | 67 |  I $D(RXOPTS)>1  D  Q:LTAG'>0 LTAG
 | 
|---|
 | 68 |  . N ATTR,REGIEN
 | 
|---|
 | 69 |  . S ATTR=$S(RXALL:"ALL",1:"")
 | 
|---|
 | 70 |  . S LTAG=$$ADDVAL^RORTSK11(RORTSK,"DRUGS",ATTR,PARTAG)
 | 
|---|
 | 71 |  . Q:LTAG'>0
 | 
|---|
 | 72 |  . ;--- Output option attributes
 | 
|---|
 | 73 |  . S ATTR="",RC=0
 | 
|---|
 | 74 |  . F  S ATTR=$O(RXOPTS(ATTR))  Q:ATTR=""  D  Q:RC<0
 | 
|---|
 | 75 |  . . S RC=$$ADDATTR^RORTSK11(RORTSK,LTAG,ATTR,"1")
 | 
|---|
 | 76 |  . I RC<0  S LTAG=RC  Q
 | 
|---|
 | 77 |  . S ATTR=$$OPTXT^RORXU002(.RXOPTS)
 | 
|---|
 | 78 |  . D:ATTR'="" ADDATTR^RORTSK11(RORTSK,LTAG,"DESCR",ATTR)
 | 
|---|
 | 79 |  . ;--- Add registry-specific and/or investigational drugs
 | 
|---|
 | 80 |  . Q:RXALL
 | 
|---|
 | 81 |  . S REGIEN=+$$PARAM^RORTSK01("REGIEN"),TMP="AR"
 | 
|---|
 | 82 |  . S:$G(RXOPTS("INVESTIG")) TMP=TMP_"C"
 | 
|---|
 | 83 |  . S:$G(RXOPTS("REGMEDS")) TMP=TMP_"DG"
 | 
|---|
 | 84 |  . S RC=$$DRUGLIST^RORUTL16(ROR8LST,REGIEN,TMP)
 | 
|---|
 | 85 |  ;
 | 
|---|
 | 86 |  ;=== Process the list of drugs (if present)
 | 
|---|
 | 87 |  I 'RXALL  D:$D(RORTSK("PARAMS","DRUGS","G"))>1
 | 
|---|
 | 88 |  . N GRPNAME,GRPTAG,IG,NODE
 | 
|---|
 | 89 |  . I LTAG'>0  D  Q:LTAG'>0
 | 
|---|
 | 90 |  . . S LTAG=$$ADDVAL^RORTSK11(RORTSK,"DRUGS",,PARTAG)
 | 
|---|
 | 91 |  . ;---
 | 
|---|
 | 92 |  . S NODE=$NA(RORTSK("PARAMS","DRUGS","G"))
 | 
|---|
 | 93 |  . S GRPNAME="",RC=0
 | 
|---|
 | 94 |  . F  S GRPNAME=$O(@NODE@(GRPNAME))  Q:GRPNAME=""  D  Q:RC<0
 | 
|---|
 | 95 |  . . S IG=$O(GRPLST("C",""),-1)+1
 | 
|---|
 | 96 |  . . S GRPLST("C",IG)=GRPNAME,GRPLST("N",GRPNAME)=IG
 | 
|---|
 | 97 |  . . S GRPTAG=$$DRUGLST1(LTAG,GRPNAME,IG)
 | 
|---|
 | 98 |  . . I GRPTAG'>0  S RC=GRPTAG  Q
 | 
|---|
 | 99 |  . . ;--- Individual Formulations
 | 
|---|
 | 100 |  . . S RC=$$DRUGLSTF(GRPTAG,GRPNAME,IG)  Q:RC<0
 | 
|---|
 | 101 |  . . ;--- Generic Names
 | 
|---|
 | 102 |  . . S RC=$$DRUGLSTG(GRPTAG,GRPNAME,IG)  Q:RC<0
 | 
|---|
 | 103 |  . . ;--- Drug Classes
 | 
|---|
 | 104 |  . . S RC=$$DRUGLSTC(GRPTAG,GRPNAME,IG)  Q:RC<0
 | 
|---|
 | 105 |  ;
 | 
|---|
 | 106 |  ;===
 | 
|---|
 | 107 |  Q $S(RC<0:RC,1:LTAG)
 | 
|---|
 | 108 |  ;
 | 
|---|
 | 109 |  ;***** PROCESS THE GROUP ATTRIBUTES
 | 
|---|
 | 110 |  ;
 | 
|---|
 | 111 |  ; PTAG          Reference (IEN) to the parent tag
 | 
|---|
 | 112 |  ; GRPNAME       Group Name
 | 
|---|
 | 113 |  ; GRPCODE       Group Code (sequential number)
 | 
|---|
 | 114 |  ;
 | 
|---|
 | 115 |  ; Return Values:
 | 
|---|
 | 116 |  ;       <0  Error code
 | 
|---|
 | 117 |  ;       >0  IEN of the GROUP element
 | 
|---|
 | 118 |  ;
 | 
|---|
 | 119 | DRUGLST1(PTAG,GRPNAME,GRPCODE) ;
 | 
|---|
 | 120 |  N GRPOPTS,GRPTAG,RC,TMP
 | 
|---|
 | 121 |  ;--- Create the group tag
 | 
|---|
 | 122 |  S GRPTAG=$$ADDVAL^RORTSK11(RORTSK,"GROUP",,PTAG)
 | 
|---|
 | 123 |  Q:GRPTAG'>0 GRPTAG
 | 
|---|
 | 124 |  D ADDATTR^RORTSK11(RORTSK,GRPTAG,"NAME",GRPNAME)
 | 
|---|
 | 125 |  ;--- Process the group attributes
 | 
|---|
 | 126 |  M GRPOPTS=RORTSK("PARAMS","DRUGS","G",GRPNAME,"A")
 | 
|---|
 | 127 |  I $D(GRPOPTS)>1  S RC=0  D  Q:RC<0 RC
 | 
|---|
 | 128 |  . N ATTR,REGIEN  S ATTR=""
 | 
|---|
 | 129 |  . F  S ATTR=$O(GRPOPTS(ATTR))  Q:ATTR=""  D  Q:RC<0
 | 
|---|
 | 130 |  . . S RC=$$ADDATTR^RORTSK11(RORTSK,GRPTAG,ATTR,"1")
 | 
|---|
 | 131 |  . Q:RC<0
 | 
|---|
 | 132 |  . S TMP=$$OPTXT^RORXU002(.GRPOPTS)
 | 
|---|
 | 133 |  . D:TMP'="" ADDATTR^RORTSK11(RORTSK,GRPTAG,"DESCR",TMP)
 | 
|---|
 | 134 |  . ;--- Add registry-specific and/or investigational drugs
 | 
|---|
 | 135 |  . S REGIEN=+$$PARAM^RORTSK01("REGIEN"),TMP="AR"
 | 
|---|
 | 136 |  . S:$G(GRPOPTS("INVESTIG")) TMP=TMP_"C"
 | 
|---|
 | 137 |  . S:$G(GRPOPTS("REGMEDS")) TMP=TMP_"DG"
 | 
|---|
 | 138 |  . S RC=$$DRUGLIST^RORUTL16(ROR8LST,REGIEN,TMP,GRPCODE)
 | 
|---|
 | 139 |  ;---
 | 
|---|
 | 140 |  Q GRPTAG
 | 
|---|
 | 141 |  ;
 | 
|---|
 | 142 |  ;***** PROCESS DRUG CLASSES
 | 
|---|
 | 143 |  ;
 | 
|---|
 | 144 |  ; PTAG          Reference (IEN) to the parent tag
 | 
|---|
 | 145 |  ; GRPNAME       Group Name
 | 
|---|
 | 146 |  ; GRPCODE       Group Code (sequential number)
 | 
|---|
 | 147 |  ;
 | 
|---|
 | 148 |  ; Return Values:
 | 
|---|
 | 149 |  ;       <0  Error code
 | 
|---|
 | 150 |  ;       >0  IEN of the VARXCLS element
 | 
|---|
 | 151 |  ;
 | 
|---|
 | 152 | DRUGLSTC(PTAG,GRPNAME,GRPCODE) ;
 | 
|---|
 | 153 |  N CODE,IEN,LTAG,NODE,RORTMP,SUBS
 | 
|---|
 | 154 |  S NODE=$NA(RORTSK("PARAMS","DRUGS","G",GRPNAME,"VARXCLS"))
 | 
|---|
 | 155 |  Q:$D(@NODE)<10 0
 | 
|---|
 | 156 |  S LTAG=$$ADDVAL^RORTSK11(RORTSK,"VARXCLS",,PTAG)
 | 
|---|
 | 157 |  Q:LTAG<0 LTAG
 | 
|---|
 | 158 |  ;---
 | 
|---|
 | 159 |  S RORTMP=$$ALLOC^RORTMP(.SUBS)
 | 
|---|
 | 160 |  S IEN=0
 | 
|---|
 | 161 |  F  S IEN=$O(@NODE@(IEN))  Q:IEN'>0  D
 | 
|---|
 | 162 |  . D IEN^PSN50P65(IEN,,SUBS)
 | 
|---|
 | 163 |  . S CODE=$G(@RORTMP@(IEN,.01))  Q:CODE=""
 | 
|---|
 | 164 |  . D ADDVAL^RORTSK11(RORTSK,"VARXCL",CODE,LTAG,,IEN)
 | 
|---|
 | 165 |  . D RXADDVCL^RORUTL16(ROR8LST,IEN,1,GRPCODE)
 | 
|---|
 | 166 |  D FREE^RORTMP(RORTMP)
 | 
|---|
 | 167 |  ;---
 | 
|---|
 | 168 |  Q LTAG
 | 
|---|
 | 169 |  ;
 | 
|---|
 | 170 |  ;***** PROCESS INDIVIDUAL FORMULATIONS
 | 
|---|
 | 171 |  ;
 | 
|---|
 | 172 |  ; PTAG          Reference (IEN) to the parent tag
 | 
|---|
 | 173 |  ; GRPNAME       Group Name
 | 
|---|
 | 174 |  ; GRPCODE       Group Code (sequential number)
 | 
|---|
 | 175 |  ;
 | 
|---|
 | 176 |  ; Return Values:
 | 
|---|
 | 177 |  ;       <0  Error code
 | 
|---|
 | 178 |  ;       >0  IEN of the FORMULATIONS element
 | 
|---|
 | 179 |  ;
 | 
|---|
 | 180 | DRUGLSTF(PTAG,GRPNAME,GRPCODE) ;
 | 
|---|
 | 181 |  N IEN,LTAG,NAME,NODE,RORTMP,SUBS
 | 
|---|
 | 182 |  S NODE=$NA(RORTSK("PARAMS","DRUGS","G",GRPNAME,"FORMULATIONS"))
 | 
|---|
 | 183 |  Q:$D(@NODE)<10 0
 | 
|---|
 | 184 |  S LTAG=$$ADDVAL^RORTSK11(RORTSK,"FORMULATIONS",,PTAG)
 | 
|---|
 | 185 |  Q:LTAG<0 LTAG
 | 
|---|
 | 186 |  ;---
 | 
|---|
 | 187 |  S RORTMP=$$ALLOC^RORTMP(.SUBS)
 | 
|---|
 | 188 |  S IEN=0
 | 
|---|
 | 189 |  F  S IEN=$O(@NODE@(IEN))  Q:IEN'>0  D
 | 
|---|
 | 190 |  . D ZERO^PSS50(IEN,,,,,SUBS)
 | 
|---|
 | 191 |  . S NAME=$G(@RORTMP@(IEN,.01))  Q:NAME=""
 | 
|---|
 | 192 |  . D ADDVAL^RORTSK11(RORTSK,"DRUG",NAME,LTAG,,IEN)
 | 
|---|
 | 193 |  . S @ROR8LST@(IEN,GRPCODE)=""
 | 
|---|
 | 194 |  D FREE^RORTMP(RORTMP)
 | 
|---|
 | 195 |  ;---
 | 
|---|
 | 196 |  Q LTAG
 | 
|---|
 | 197 |  ;
 | 
|---|
 | 198 |  ;***** PROCESS GENERIC NAMES
 | 
|---|
 | 199 |  ;
 | 
|---|
 | 200 |  ; PTAG          Reference (IEN) to the parent tag
 | 
|---|
 | 201 |  ; GRPNAME       Group Name
 | 
|---|
 | 202 |  ; GRPCODE       Group Code (sequential number)
 | 
|---|
 | 203 |  ;
 | 
|---|
 | 204 |  ; Return Values:
 | 
|---|
 | 205 |  ;       <0  Error code
 | 
|---|
 | 206 |  ;       >0  IEN of the GENERIC element
 | 
|---|
 | 207 |  ;
 | 
|---|
 | 208 | DRUGLSTG(PTAG,GRPNAME,GRPCODE) ;
 | 
|---|
 | 209 |  N IEN,LTAG,NAME,NODE,RORTMP,SUBS
 | 
|---|
 | 210 |  S NODE=$NA(RORTSK("PARAMS","DRUGS","G",GRPNAME,"GENERIC"))
 | 
|---|
 | 211 |  Q:$D(@NODE)<10 0
 | 
|---|
 | 212 |  S LTAG=$$ADDVAL^RORTSK11(RORTSK,"GENERIC",,PTAG)
 | 
|---|
 | 213 |  Q:LTAG<0 LTAG
 | 
|---|
 | 214 |  ;---
 | 
|---|
 | 215 |  S RORTMP=$$ALLOC^RORTMP(.SUBS)
 | 
|---|
 | 216 |  S IEN=0
 | 
|---|
 | 217 |  F  S IEN=$O(@NODE@(IEN))  Q:IEN'>0  D
 | 
|---|
 | 218 |  . D ZERO^PSN50P6(IEN,,,,SUBS)
 | 
|---|
 | 219 |  . S NAME=$G(@RORTMP@(IEN,.01))  Q:NAME=""
 | 
|---|
 | 220 |  . D ADDVAL^RORTSK11(RORTSK,"DRUG",NAME,LTAG,,IEN)
 | 
|---|
 | 221 |  . D RXADDGEN^RORUTL16(ROR8LST,IEN,1,GRPCODE)
 | 
|---|
 | 222 |  D FREE^RORTMP(RORTMP)
 | 
|---|
 | 223 |  ;---
 | 
|---|
 | 224 |  Q LTAG
 | 
|---|
 | 225 |  ;
 | 
|---|
 | 226 |  ;***** FUNCTION FOR THE PHARMACY SEARCH API
 | 
|---|
 | 227 |  ;
 | 
|---|
 | 228 |  ; .RORDST       Reference to the search descriptor
 | 
|---|
 | 229 |  ; DRUGIEN       IEN of an individual formulation (dispensed drug)
 | 
|---|
 | 230 |  ; ROR8LST       Closed root of the drug list generated by the
 | 
|---|
 | 231 |  ;               $$DRUGLST^RORXU007 function or "*" for all drugs.
 | 
|---|
 | 232 |  ;
 | 
|---|
 | 233 |  ; Return Values:
 | 
|---|
 | 234 |  ;        0  Ok
 | 
|---|
 | 235 |  ;        1  Skip the record
 | 
|---|
 | 236 |  ;
 | 
|---|
 | 237 | RXGRPCHK(RORDST,DRUGIEN,ROR8LST) ;
 | 
|---|
 | 238 |  Q:ROR8LST="*" 0
 | 
|---|
 | 239 |  Q:$D(@ROR8LST@(DRUGIEN))<10 1
 | 
|---|
 | 240 |  N GRP  S GRP=""
 | 
|---|
 | 241 |  F  S GRP=$O(@ROR8LST@(DRUGIEN,GRP))  Q:GRP=""  D
 | 
|---|
 | 242 |  . K RORDST("RORXGRP",GRP)
 | 
|---|
 | 243 |  Q 0
 | 
|---|