| 1 | ORWDLR32 ; SLC/KCM/REV/JDL - Lab Calls 6/28/2002
 | 
|---|
| 2 |  ;;3.0;ORDER ENTRY/RESULTS REPORTING;**10,85,141,215,250**;Dec 17, 1997;Build 1
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 |  ; DBIA 2263   GETLST^XPAR  ^TMP($J,"WC")
 | 
|---|
| 5 |  ;
 | 
|---|
| 6 | DEF(LST,ALOC,ADIV) ; procedure
 | 
|---|
| 7 |  ; For Event Delay Order
 | 
|---|
| 8 |  ;  ALOC: Delay Event's default location
 | 
|---|
| 9 |  ;  ADIV: Delay Event's default division
 | 
|---|
| 10 |  ; get dialog definition specific to lab
 | 
|---|
| 11 |  S ILST=0
 | 
|---|
| 12 |  S LST($$NXT)="~ShortList" D SHORT
 | 
|---|
| 13 |  S LST($$NXT)="~Lab Collection Times" D LCOLLTM
 | 
|---|
| 14 |  S LST($$NXT)="~Ward Collection Times" D WCOLLTM
 | 
|---|
| 15 |  S LST($$NXT)="~Send Patient Times" D SENDTM
 | 
|---|
| 16 |  S LST($$NXT)="~Collection Types" D COLLTYP
 | 
|---|
| 17 |  S LST($$NXT)="~Default Urgency" D URGENCY
 | 
|---|
| 18 |  S LST($$NXT)="~Schedules" D SCHED
 | 
|---|
| 19 |  S LST($$NXT)="~Common" D COMMON
 | 
|---|
| 20 |  Q
 | 
|---|
| 21 | SHORT ; from DEF, get short list of lab quick orders
 | 
|---|
| 22 |  N I,ORTMP,ORDG,A
 | 
|---|
| 23 |  S I=$O(^ORD(100.98,"B","LAB",0))  ; get IEN of parent lab
 | 
|---|
| 24 |  D DG^ORCHANG1(I,"BILD",.ORDG)   ; find members groups for parent lab
 | 
|---|
| 25 |  S I=0
 | 
|---|
| 26 |  F  S I=$O(ORDG(I)) Q:'I  D   ; loop through list of members groups
 | 
|---|
| 27 |  . D GETQLST^ORWDXQ(.ORTMP,I,"Q")   ;get quick order of each members groups
 | 
|---|
| 28 |  . S A=0 F  S A=$O(ORTMP(A)) Q:'A  D   ; loop through returned quick orders and
 | 
|---|
| 29 |  . . S LST($$NXT)="i"_ORTMP(A)  ; move quick orders to display list
 | 
|---|
| 30 |  . K ORTMP   ; clean up for next members groups of quick orders
 | 
|---|
| 31 |  Q
 | 
|---|
| 32 | LCOLLTM ; get collection times
 | 
|---|
| 33 |  N TDAY,TMRW,IGNOR,CNT,ICTM,ORCTM,DOW,AMPM,DAY,TIME,TXDT
 | 
|---|
| 34 |  S TDAY=DT,TDAY("DOW")=$H#7,TDAY("H")=$H,TDAY("TX")="T"
 | 
|---|
| 35 |  M TMRW=TDAY D INCDATE(.TMRW)
 | 
|---|
| 36 |  I $G(ALOC),'$$GET^XPAR(ALOC_";SC(","LR EXCEPTED LOCATIONS",1,"Q") D
 | 
|---|
| 37 |  . S IGNOR=$$GET^XPAR("ALL","LR IGNORE HOLIDAYS",1,"Q")
 | 
|---|
| 38 |  . S DOW(0)=$$GET^XPAR("ALL","LR COLLECT THURSDAY",1,"Q")
 | 
|---|
| 39 |  . S DOW(1)=$$GET^XPAR("ALL","LR COLLECT FRIDAY",1,"Q")
 | 
|---|
| 40 |  . S DOW(2)=$$GET^XPAR("ALL","LR COLLECT SATURDAY",1,"Q")
 | 
|---|
| 41 |  . S DOW(3)=$$GET^XPAR("ALL","LR COLLECT SUNDAY",1,"Q")
 | 
|---|
| 42 |  . S DOW(4)=$$GET^XPAR("ALL","LR COLLECT MONDAY",1,"Q")
 | 
|---|
| 43 |  . S DOW(5)=$$GET^XPAR("ALL","LR COLLECT TUESDAY",1,"Q")
 | 
|---|
| 44 |  . S DOW(6)=$$GET^XPAR("ALL","LR COLLECT WEDNESDAY",1,"Q")
 | 
|---|
| 45 |  . S CNT=0 F  Q:(DOW(TDAY("DOW"))=1)&((IGNOR=1)!('$D(^HOLIDAY(TDAY,0))))  D  Q:CNT>6
 | 
|---|
| 46 |  . . D INCDATE(.TDAY) S CNT=CNT+1
 | 
|---|
| 47 |  . S CNT=0 F  Q:(DOW(TMRW("DOW"))=1)&((IGNOR=1)!('$D(^HOLIDAY(TMRW,0))))  D  Q:CNT>6
 | 
|---|
| 48 |  . . D INCDATE(.TMRW) S CNT=CNT+1
 | 
|---|
| 49 |  I $G(ADIV) D GETLST^XPAR(.ORCTM,ADIV_";DIC(4,^SYS","LR PHLEBOTOMY COLLECTION","Q")
 | 
|---|
| 50 |  E  D GETLST^XPAR(.ORCTM,"ALL","LR PHLEBOTOMY COLLECTION","Q")
 | 
|---|
| 51 |  ;S DUZ(2)=TMPDIV
 | 
|---|
| 52 |  S LST($$NXT)="iLNEXT^Next scheduled lab collection"
 | 
|---|
| 53 |  S ICTM=0 F  S ICTM=$O(ORCTM(ICTM)) Q:'ICTM  D
 | 
|---|
| 54 |  . I $P(ORCTM(ICTM),U)>$P($H,",",2) D
 | 
|---|
| 55 |  . . S TXDT=TDAY("TX")
 | 
|---|
| 56 |  . . I +TDAY("H")=+$H S DAY="Today"
 | 
|---|
| 57 |  . . I TDAY("H")-$H=1 S DAY="Tomorrow"
 | 
|---|
| 58 |  . . I TDAY("H")-$H>1 S DAY=$$DOWNAME(TDAY("DOW"))
 | 
|---|
| 59 |  . E  D
 | 
|---|
| 60 |  . . S TXDT=TMRW("TX")
 | 
|---|
| 61 |  . . S DAY=$S(TMRW("H")-$H>1:$$DOWNAME(TMRW("DOW")),1:"Tomorrow")
 | 
|---|
| 62 |  . S AMPM=$S($P(ORCTM(ICTM),U,2)>1159:"PM",1:"AM")
 | 
|---|
| 63 |  . S TXDT=TXDT_"@"_$P(ORCTM(ICTM),"^",2)
 | 
|---|
| 64 |  . S TIME=$P(ORCTM(ICTM),U,2),TIME=$E(TIME,1,2)_":"_$E(TIME,3,4)
 | 
|---|
| 65 |  . S LST($$NXT)="iL"_TXDT_U_AMPM_" Collection: "_TIME_" ("_DAY_")"
 | 
|---|
| 66 |  . S ^TMP($J,"WC",ILST)="iW"_TXDT_U_TIME_" "_AMPM_" ("_DAY_") Ward collect"  ;DBIA 2263
 | 
|---|
| 67 |  ; D NOW^%DTC
 | 
|---|
| 68 |  ;S LST($$NXT)="iWNOW^Now (Collect on ward)"
 | 
|---|
| 69 |  S LST($$NXT)="iLO^Future"
 | 
|---|
| 70 |  Q
 | 
|---|
| 71 | WCOLLTM ; get Ward Collect times
 | 
|---|
| 72 |  S I=""
 | 
|---|
| 73 |  F  S I=$O(^TMP($J,"WC",I)) Q:I=""  D
 | 
|---|
| 74 |  . S LST($$NXT)=^TMP($J,"WC",I)
 | 
|---|
| 75 |  S LST($$NXT)="iWNOW^Now (Collect on ward)"
 | 
|---|
| 76 |  ;S LST($$NXT)="iWO^Other"
 | 
|---|
| 77 |  K ^TMP($J,"WC")
 | 
|---|
| 78 |  Q
 | 
|---|
| 79 | SENDTM ; get send patient times
 | 
|---|
| 80 |  ;N X,X1,X2
 | 
|---|
| 81 |  S LST($$NXT)="iLT^Today"
 | 
|---|
| 82 |  ;S X1=DT,X2=1 D C^%DTC
 | 
|---|
| 83 |  S LST($$NXT)="iLT+1^Tomorrow"
 | 
|---|
| 84 |  ;S LST($$NXT)="iLO^Other"
 | 
|---|
| 85 |  Q
 | 
|---|
| 86 | COLLTYP ; Collection Types in effect for this division
 | 
|---|
| 87 |  N Y S Y=""
 | 
|---|
| 88 |  S LST($$NXT)="iLC^Lab Collect"
 | 
|---|
| 89 |  S LST($$NXT)="iWC^Ward Collect"
 | 
|---|
| 90 |  S LST($$NXT)="iSP^Send Patient to Lab"
 | 
|---|
| 91 |  I +$$ON^LR7OV4(DUZ(2)) S LST($$NXT)="iI^Immediate Collect"
 | 
|---|
| 92 |  S:$G(ALOC) Y=$$GET^XPAR("ALL^"_ALOC_";SC(","LR DEFAULT TYPE QUICK")
 | 
|---|
| 93 |  I $L(Y) S LST($$NXT)="d"_Y
 | 
|---|
| 94 |  Q
 | 
|---|
| 95 | INCDATE(ADATE) ; called from COLLTM, increments date nodes in .ADATE
 | 
|---|
| 96 |  N X,X1,X2,%H
 | 
|---|
| 97 |  S X1=ADATE,X2=1 D C^%DTC S ADATE=X
 | 
|---|
| 98 |  S ADATE("H")=ADATE("H")+1
 | 
|---|
| 99 |  S ADATE("DOW")=ADATE("H")#7
 | 
|---|
| 100 |  S ADATE("TX")="T+"_($P(ADATE("TX"),"+",2)+1)
 | 
|---|
| 101 |  Q
 | 
|---|
| 102 | DOWNAME(DOW) ; function
 | 
|---|
| 103 |  ; Returns Day of Week name (DOW should be $H#7)
 | 
|---|
| 104 |  I DOW=0 Q "Thursday"
 | 
|---|
| 105 |  I DOW=1 Q "Friday"
 | 
|---|
| 106 |  I DOW=2 Q "Saturday"
 | 
|---|
| 107 |  I DOW=3 Q "Sunday"
 | 
|---|
| 108 |  I DOW=4 Q "Monday"
 | 
|---|
| 109 |  I DOW=5 Q "Tuesday"
 | 
|---|
| 110 |  I DOW=6 Q "Wednesday"
 | 
|---|
| 111 |  Q ""
 | 
|---|
| 112 | URGENCY ; return default urgency for lab
 | 
|---|
| 113 |  N URG
 | 
|---|
| 114 |  S URG=$$DEFURG^LR7OR3
 | 
|---|
| 115 |  S LST($$NXT)="i"_URG_U_$P(^LAB(62.05,URG,0),U,1)
 | 
|---|
| 116 |  S LST($$NXT)="d"_URG_U_$P(^LAB(62.05,URG,0),U,1)
 | 
|---|
| 117 |  Q
 | 
|---|
| 118 | SCHED ; return list of schedules available for lab tests
 | 
|---|
| 119 |  N X,X0,IEN
 | 
|---|
| 120 |  S X="" F  S X=$O(^PS(51.1,"APLR",X)) Q:X=""  S IEN=$O(^(X,0)) I IEN D
 | 
|---|
| 121 |  . S X0=$G(^PS(51.1,IEN,0)) Q:X0=""
 | 
|---|
| 122 |  . I (($P(X0,U,5)="C")!($P(X0,U,5)="D")),(+$P(X0,U,3)=0) Q
 | 
|---|
| 123 |  . S LST($$NXT)="i"_IEN_U_X_U_$P(X0,U,5)_U_$P(X0,U,3)
 | 
|---|
| 124 |  . I X="ONE TIME" S LST($$NXT)="d"_IEN_U_X
 | 
|---|
| 125 |  Q
 | 
|---|
| 126 | COMMON ; return list of commonly ordered lab tests
 | 
|---|
| 127 |  N ORLST,IEN,I
 | 
|---|
| 128 |  D GETLST^XPAR(.ORLST,"ALL","ORWD COMMON LAB INPT")  ;DBIA 2263
 | 
|---|
| 129 |  S I=0 F  S I=$O(ORLST(I)) Q:'I  D
 | 
|---|
| 130 |  . S IEN=$P(ORLST(I),U,2)
 | 
|---|
| 131 |  . S LST($$NXT)="i"_IEN_U_$P(^ORD(101.43,IEN,0),U,1)
 | 
|---|
| 132 |  Q
 | 
|---|
| 133 | LOAD(LST,TESTID) ; procedure
 | 
|---|
| 134 |  ; Return sample, specimen, & urgency info about a lab test
 | 
|---|
| 135 |  N I,J,X,X1,X4,ORY,ORLABID,ILST,PARAM
 | 
|---|
| 136 |  S ILST=0
 | 
|---|
| 137 |  S LST($$NXT)="~Test Name"
 | 
|---|
| 138 |  S LST($$NXT)="d"_$P(^ORD(101.43,TESTID,0),U,1),ORLABID=$P(^(0),U,2)
 | 
|---|
| 139 |  S LST($$NXT)="~Item ID"
 | 
|---|
| 140 |  S LST($$NXT)="d"_+ORLABID
 | 
|---|
| 141 |  S X=$P(ORLABID,";",1),X1=$P(ORLABID,";",2)
 | 
|---|
| 142 |  I $E(X1,1,4)="99VB" S X1=$O(^LAB(60,"B","VBECS "_$P(^ORD(101.43,TESTID,0),"^"),0)) Q:'X1  S X=X1
 | 
|---|
| 143 |  S X4=$P($G(^LAB(60,X,0)),U,4)
 | 
|---|
| 144 |  S LST(ILST)=LST(ILST)_U_X4
 | 
|---|
| 145 |  I $D(^ORD(101.43,TESTID,8))>1 S LST($$NXT)="~OIMessage"
 | 
|---|
| 146 |  S I=0 F  S I=$O(^ORD(101.43,TESTID,8,I)) Q:'I  S LST($$NXT)="t"_^(I,0)
 | 
|---|
| 147 |  S TESTID=+$P(^ORD(101.43,TESTID,0),U,2)
 | 
|---|
| 148 |  D TEST^LR7OR3(TESTID,.ORY)
 | 
|---|
| 149 |  S PARAM="" F  S PARAM=$O(ORY(PARAM)) Q:PARAM=""  D
 | 
|---|
| 150 |  . S LST($$NXT)="~"_PARAM
 | 
|---|
| 151 |  . I PARAM="ReqCom" D
 | 
|---|
| 152 |  . . S LST($$NXT)="d"_$G(ORY("ReqCom")) Q
 | 
|---|
| 153 |  . I PARAM="Default CollSamp" D
 | 
|---|
| 154 |  . . S LST($$NXT)="d"_$G(ORY("Default CollSamp")) Q
 | 
|---|
| 155 |  . I PARAM="Unique CollSamp" D
 | 
|---|
| 156 |  . . S LST($$NXT)="d"_$G(ORY("Unique CollSamp")) Q
 | 
|---|
| 157 |  . I PARAM="Default Urgency" D
 | 
|---|
| 158 |  . . S LST($$NXT)="d"_$G(ORY("Default Urgency")) Q
 | 
|---|
| 159 |  . I PARAM="Lab CollSamp" D
 | 
|---|
| 160 |  . . S LST($$NXT)="d"_$G(ORY("Lab CollSamp")) Q
 | 
|---|
| 161 |  . I $D(ORY(PARAM))>1 S I=0 F  S I=$O(ORY(PARAM,I)) Q:'I  D
 | 
|---|
| 162 |  . . I PARAM="Specimens" S LST($$NXT)="i"_ORY(PARAM,I) Q
 | 
|---|
| 163 |  . . I PARAM="Urgencies" S LST($$NXT)="i"_ORY(PARAM,I) Q
 | 
|---|
| 164 |  . . I PARAM="GenWardInstructions" S LST($$NXT)="t"_ORY(PARAM,I,0) Q
 | 
|---|
| 165 |  . . S LST($$NXT)="i"_I_U_ORY(PARAM,I)
 | 
|---|
| 166 |  . . I PARAM="CollSamp" D
 | 
|---|
| 167 |  . . . I $G(ORY("Lab CollSamp")) S $P(LST(ILST),U,8)=1
 | 
|---|
| 168 |  . . . S X=+$P(ORY(PARAM,I),U,3)
 | 
|---|
| 169 |  . . . I X S $P(LST(ILST),U,10)=$P($G(^LAB(61,X,0)),U,1)
 | 
|---|
| 170 |  . . I $D(ORY(PARAM,I,"WP")) S J=0 F  S J=$O(ORY(PARAM,I,"WP",J)) Q:'J  D
 | 
|---|
| 171 |  . . . S LST($$NXT)="t"_ORY(PARAM,I,"WP",J,0)
 | 
|---|
| 172 |  Q
 | 
|---|
| 173 | ALLSAMP(LST) ; procedure
 | 
|---|
| 174 |  ; returns all collection samples
 | 
|---|
| 175 |  ; n^SampIEN^SampName^SpecPtr^TubeTop^^^LabCollect^^SpecName
 | 
|---|
| 176 |  N SMP,SPC,ILST,IEN,X,X0
 | 
|---|
| 177 |  S ILST=0,LST($$NXT)="~CollSamp"
 | 
|---|
| 178 |  S SMP="" F  S SMP=$O(^LAB(62,"B",SMP)) Q:SMP=""  D
 | 
|---|
| 179 |  . S IEN=0 F  S IEN=$O(^LAB(62,"B",SMP,IEN)) Q:'IEN  D
 | 
|---|
| 180 |  . . S X0=^LAB(62,IEN,0)
 | 
|---|
| 181 |  . . S X="i"_U_IEN_U_SMP_U_$P(X0,U,2)_U_$P(X0,U,3)_U_U_U_$P(X0,U,7)
 | 
|---|
| 182 |  . . I $P(X0,U,2) D
 | 
|---|
| 183 |  . . . S $P(X,U,10)=$P(^LAB(61,+$P(X0,U,2),0),U,1)
 | 
|---|
| 184 |  . . . S SPC($P(X,U,4))=$P(X,U,10)
 | 
|---|
| 185 |  . . S LST($$NXT)=X
 | 
|---|
| 186 |  S LST($$NXT)="~Specimens"
 | 
|---|
| 187 |  S SPC=0 F  S SPC=$O(SPC(SPC)) Q:'SPC  S LST($$NXT)=SPC_U_SPC(SPC)
 | 
|---|
| 188 |  Q
 | 
|---|
| 189 | ONESAMP(LST,IEN) ;Return data for one colelction sample
 | 
|---|
| 190 |  ; n^SampIEN^SampName^SpecPtr^TubeTop^^^LabCollect^^SpecName
 | 
|---|
| 191 |  N SPC,ILST,X,X0
 | 
|---|
| 192 |  Q:+$G(IEN)=0
 | 
|---|
| 193 |  S ILST=0,LST($$NXT)="~CollSamp"
 | 
|---|
| 194 |  S X0=^LAB(62,IEN,0)
 | 
|---|
| 195 |  S X="i1"_U_IEN_U_$P(X0,U,1)_U_$P(X0,U,2)_U_$P(X0,U,3)_U_U_U_$P(X0,U,7)
 | 
|---|
| 196 |  I $P(X0,U,2) D
 | 
|---|
| 197 |  . S $P(X,U,10)=$P(^LAB(61,+$P(X0,U,2),0),U,1)
 | 
|---|
| 198 |  . S SPC($P(X,U,4))=$P(X,U,10)
 | 
|---|
| 199 |  S LST($$NXT)=X
 | 
|---|
| 200 |  S LST($$NXT)="~Specimens"
 | 
|---|
| 201 |  S SPC=0 F  S SPC=$O(SPC(SPC)) Q:'SPC  S LST($$NXT)=SPC_U_SPC(SPC)
 | 
|---|
| 202 |  Q
 | 
|---|
| 203 | ONESPEC(LST,IEN) ;return one specimen
 | 
|---|
| 204 |  Q:(+$G(IEN)=0)!('$D(^LAB(61,IEN,0)))
 | 
|---|
| 205 |  S LST=IEN_U_$P(^LAB(61,IEN,0),U,1)
 | 
|---|
| 206 |  Q
 | 
|---|
| 207 | ABBSPEC(LST) ; procedure
 | 
|---|
| 208 |  ; returns specimens with abbreviation (uses 'E' xref)
 | 
|---|
| 209 |  N X,IEN,ILST S ILST=0
 | 
|---|
| 210 |  S X="" F  S X=$O(^LAB(61,"E",X)) Q:X=""  S IEN=$O(^(X,0)) D
 | 
|---|
| 211 |  . S LST($$NXT)=IEN_U_$P(^LAB(61,IEN,0),U,1)
 | 
|---|
| 212 |  Q
 | 
|---|
| 213 | NXT() ; called by TESTINFO, increments ILST
 | 
|---|
| 214 |  S ILST=ILST+1
 | 
|---|
| 215 |  Q ILST
 | 
|---|
| 216 |  ;
 | 
|---|