| 1 | ORQQPS ; slc/CLA - Functions which return patient medication data ;12/15/97 [ 04/02/97  3:52 PM ]
 | 
|---|
| 2 |  ;;3.0;ORDER ENTRY/RESULTS REPORTING;**9,74,94**;Dec 17, 1997
 | 
|---|
| 3 |  Q
 | 
|---|
| 4 | LIST(ORY,ORPT,ORSTRTDT,ORSTOPDT) ;return pt's condensed medication list
 | 
|---|
| 5 |  ;id^nameform^stop date^route^schedule/infusion rate^refills remaining
 | 
|---|
| 6 |  K ^TMP("PS",$J),^TMP("ORPS",$J)
 | 
|---|
| 7 |  D OCL^PSOORRL(ORPT,ORSTRTDT,ORSTOPDT)
 | 
|---|
| 8 |  N I,J,K,X,Z,ZZ,NODE,RSORT,NAME,SCH,MDR,RATE,TYPE,ADD,SOL,IVX
 | 
|---|
| 9 |  S I=0,X=0,NODE=0,SCH="",MDR=""
 | 
|---|
| 10 |  F  S X=$O(^TMP("PS",$J,X)) Q:X<1  D
 | 
|---|
| 11 |  .Q:+$P(^TMP("PS",$J,X,0),U)<1
 | 
|---|
| 12 |  .S TYPE=$P(^TMP("PS",$J,X,0),U)
 | 
|---|
| 13 |  .I +$G(^TMP("PS",$J,X,"MDR",0))>0 D  ;get abbrev med route
 | 
|---|
| 14 |  ..S ZZ=^TMP("PS",$J,X,"MDR",0) F Z=1:1:ZZ D
 | 
|---|
| 15 |  ...I Z=1 S MDR=^TMP("PS",$J,X,"MDR",Z,0)
 | 
|---|
| 16 |  ...E  S MDR=MDR_", "_^TMP("PS",$J,X,"MDR",Z,0)
 | 
|---|
| 17 |  .I +$G(^TMP("PS",$J,X,"SCH",0))>0 D  ;get schedule
 | 
|---|
| 18 |  ..S ZZ=^TMP("PS",$J,X,"SCH",0) F Z=1:1:ZZ D
 | 
|---|
| 19 |  ...I Z=1 S SCH=$P(^TMP("PS",$J,X,"SCH",Z,0),U)
 | 
|---|
| 20 |  ...E  S SCH=SCH_", "_$P(^TMP("PS",$J,X,"SCH",Z,0),U)
 | 
|---|
| 21 |  .;
 | 
|---|
| 22 |  .I TYPE["I",+$G(^TMP("PS",$J,X,"B",0))>0 D  ;IV meds - get solution
 | 
|---|
| 23 |  ..S ZZ=^TMP("PS",$J,X,"B",0) F Z=1:1:ZZ D
 | 
|---|
| 24 |  ...I Z=1 S SOL=$P(^TMP("PS",$J,X,"B",Z,0),U)_" "_$P(^(0),U,2)
 | 
|---|
| 25 |  ...E  S SOL=SOL_", "_$P(^TMP("PS",$J,X,"B",Z,0),U)_" "_$P(^(0),U,2)
 | 
|---|
| 26 |  ..I +$G(^TMP("PS",$J,X,"A",0))>0 D  ;get additive
 | 
|---|
| 27 |  ...S ZZ=^TMP("PS",$J,X,"A",0) F Z=1:1:ZZ D
 | 
|---|
| 28 |  ....S ADD=$P(^TMP("PS",$J,X,"A",Z,0),U)_" "_$P(^(0),U,2)
 | 
|---|
| 29 |  ....S NAME=ADD_" in "_$G(SOL)
 | 
|---|
| 30 |  ....S RSORT=9999999-$P(^TMP("PS",$J,X,0),U,4)_$P(^(0),U)_NAME
 | 
|---|
| 31 |  ....S RSORT=$E(RSORT,1,128)  ;limit gbl subscript length to 128 chars
 | 
|---|
| 32 |  ....S ^TMP("ORPS",$J,RSORT)=$P(^TMP("PS",$J,X,0),U)_U_NAME_U_$P(^(0),U,4)_U_$G(MDR)_U_$P(^(0),U,3)
 | 
|---|
| 33 |  ..E  D
 | 
|---|
| 34 |  ...S NAME=$G(SOL)
 | 
|---|
| 35 |  ...S RSORT=9999999-$P(^TMP("PS",$J,X,0),U,4)_$P(^(0),U)
 | 
|---|
| 36 |  ...S RSORT=$E(RSORT,1,128)  ;limit gbl subscript length to 128 chars
 | 
|---|
| 37 |  ...S ^TMP("ORPS",$J,RSORT)=$P(^TMP("PS",$J,X,0),U)_U_NAME_U_$P(^(0),U,4)_U_$G(MDR)_U_$P(^(0),U,3)
 | 
|---|
| 38 |  .;
 | 
|---|
| 39 |  .I TYPE["I",'(+$G(^TMP("PS",$J,X,"B",0))>0) D  ;unit dose inpatient meds
 | 
|---|
| 40 |  ..S RSORT=9999999-$P(^TMP("PS",$J,X,0),U,4)_$P(^(0),U)_$P(^(0),U,2)
 | 
|---|
| 41 |  ..S RSORT=$E(RSORT,1,128)  ;limit gbl subscript length to 128 chars
 | 
|---|
| 42 |  ..S ^TMP("ORPS",$J,RSORT)=$P(^TMP("PS",$J,X,0),U)_U_$P(^(0),U,2)_U_$P(^(0),U,4)_U_$G(MDR)_U_$G(SCH)
 | 
|---|
| 43 |  .;
 | 
|---|
| 44 |  .I TYPE["O" D  ;outpatient meds
 | 
|---|
| 45 |  ..S RSORT=9999999-$P(^TMP("PS",$J,X,0),U,4)_$P(^(0),U)_$P(^(0),U,2)
 | 
|---|
| 46 |  ..S RSORT=$E(RSORT,1,128)  ;limit gbl subscript length to 128 chars
 | 
|---|
| 47 |  ..S ^TMP("ORPS",$J,RSORT)=$P(^TMP("PS",$J,X,0),U)_U_$P(^(0),U,2)_U_$P(^(0),U,4)_U_$G(MDR)_U_$G(SCH)_U_$P(^(0),U,5)
 | 
|---|
| 48 |  .;
 | 
|---|
| 49 |  ;
 | 
|---|
| 50 |  F  S NODE=$O(^TMP("ORPS",$J,NODE)) Q:NODE<1  D
 | 
|---|
| 51 |  .S I=I+1
 | 
|---|
| 52 |  .S ORY(I)=^TMP("ORPS",$J,NODE)
 | 
|---|
| 53 |  S:+$G(ORY(1))<1 ORY(1)="^No medications found."
 | 
|---|
| 54 |  K ^TMP("PS",$J),^TMP("ORPS",$J)
 | 
|---|
| 55 |  Q
 | 
|---|
| 56 | DETAIL(ORY,ORPT,ORMED) ; return detailed information for a drug
 | 
|---|
| 57 |  K ^TMP("PS",$J)
 | 
|---|
| 58 |  D OEL^PSOORRL(ORPT,ORMED)
 | 
|---|
| 59 |  N I,J,CR,X,Z,ZZ,MDR,SCH,SIG,COM,ADD,SOL,ORDATE,TYPE
 | 
|---|
| 60 |  S I=0,J=1,CR=$CHAR(13),ORDATE=""
 | 
|---|
| 61 |  S TYPE=$P(ORMED,";",2)
 | 
|---|
| 62 |  S X=$G(^TMP("PS",$J,0))
 | 
|---|
| 63 |  I '$L($G(X)) S ORY(J)="No detailed information found." Q
 | 
|---|
| 64 |  S ORY(J)="     "_$P(X,U)
 | 
|---|
| 65 |  ;get abbreviated med route(s):
 | 
|---|
| 66 |  I +$G(^TMP("PS",$J,"MDR",0))>0 D
 | 
|---|
| 67 |  .S ZZ=^TMP("PS",$J,"MDR",0) F Z=1:1:ZZ D
 | 
|---|
| 68 |  ..I Z=1 S MDR=^TMP("PS",$J,"MDR",Z,0)
 | 
|---|
| 69 |  ..E  S MDR=MDR_", "_^TMP("PS",$J,"MDR",Z,0)
 | 
|---|
| 70 |  I $L($G(MDR)) S ORY(J)=ORY(J)_"  "_MDR
 | 
|---|
| 71 |  S ORY(J)=ORY(J)_"  "_$P(X,U,2)
 | 
|---|
| 72 |  ; get schedule(s):
 | 
|---|
| 73 |  I +$G(^TMP("PS",$J,"SCH",0))>0 D
 | 
|---|
| 74 |  .S ZZ=^TMP("PS",$J,"SCH",0) F Z=1:1:ZZ D
 | 
|---|
| 75 |  ..I Z=1 S SCH=$P(^TMP("PS",$J,"SCH",Z,0),U)
 | 
|---|
| 76 |  ..E  S SCH=SCH_", "_$P(^TMP("PS",$J,"SCH",Z,0),U)
 | 
|---|
| 77 |  I $L($G(SCH)) S ORY(J)=ORY(J)_"  "_SCH
 | 
|---|
| 78 |  S ORY(J)=ORY(J),J=J+1
 | 
|---|
| 79 |  ; get SIG(s):
 | 
|---|
| 80 |  I +$G(^TMP("PS",$J,"SIG",0))>0 D
 | 
|---|
| 81 |  .S ZZ=^TMP("PS",$J,"SIG",0) F Z=1:1:ZZ D
 | 
|---|
| 82 |  ..I Z=1 S SIG=^TMP("PS",$J,"SIG",Z,0)
 | 
|---|
| 83 |  ..E  S SIG=SIG_", "_^TMP("PS",$J,"SIG",Z,0)
 | 
|---|
| 84 |  I $L($G(SIG)) S ORY(J)="        "_SIG,J=J+1
 | 
|---|
| 85 |  S ORY(J)=" ",J=J+1
 | 
|---|
| 86 |  ; get solution(s):
 | 
|---|
| 87 |  I +$G(^TMP("PS",$J,"B",0))>0 D
 | 
|---|
| 88 |  .S ZZ=^TMP("PS",$J,"B",0) F Z=1:1:ZZ D
 | 
|---|
| 89 |  ..S SOL=^TMP("PS",$J,"B",Z,0),ORY(J)="        "_$P(SOL,U)_" "_$P(SOL,U,2),J=J+1
 | 
|---|
| 90 |  ; get additive(s):
 | 
|---|
| 91 |  I +$G(^TMP("PS",$J,"A",0))>0 D
 | 
|---|
| 92 |  .S ZZ=^TMP("PS",$J,"A",0) F Z=1:1:ZZ D
 | 
|---|
| 93 |  ..S ADD=^TMP("PS",$J,"A",Z,0)
 | 
|---|
| 94 |  ..S ORY(J)="        "_$P(ADD,U)
 | 
|---|
| 95 |  ..S IVX=$P(ADD,U,2)
 | 
|---|
| 96 |  ..S ORY(J)=ORY(J)_$S($D(IVX):" "_IVX,1:"")_" "_$P(ADD,U,3),J=J+1
 | 
|---|
| 97 |  I $L($G(SOL))!($L($G(ADD))) S ORY(J)=" ",J=J+1
 | 
|---|
| 98 |  ; get other information:
 | 
|---|
| 99 |  S ORY(J)="           Status: "_$P(X,U,6),J=J+1
 | 
|---|
| 100 |  S ORDATE=$P(X,U,5) I $L($G(ORDATE)) D
 | 
|---|
| 101 |  .D DT^DILF("ET",ORDATE,.ORDATE,"","")
 | 
|---|
| 102 |  S ORY(J)="       Start date: "_$G(ORDATE(0)),J=J+1
 | 
|---|
| 103 |  S ORDATE=$P(X,U,3) I $L($G(ORDATE)) D
 | 
|---|
| 104 |  .D DT^DILF("ET",ORDATE,.ORDATE,"","")
 | 
|---|
| 105 |  S ORY(J)="        Stop date: "_$G(ORDATE(0)),J=J+1
 | 
|---|
| 106 |  I TYPE="O" D  ; if outpatient med
 | 
|---|
| 107 |  .S ORY(J)="Refills remaining: "_$P(X,U,4),J=J+1
 | 
|---|
| 108 |  .S ORY(J)="      Days supply: "_$P(X,U,7),J=J+1
 | 
|---|
| 109 |  .S ORY(J)="         Quantity: "_$P(X,U,8),J=J+1
 | 
|---|
| 110 |  .S ORY(J)=" ",J=J+1
 | 
|---|
| 111 |  S ORY(J)="Comments:",J=J+1
 | 
|---|
| 112 |  S I=0 F  S I=$O(^TMP("PS",$J,"PC",I)) Q:'I  D
 | 
|---|
| 113 |  .S ORY(J)=^TMP("PS",$J,"PC",I,0),J=J+1
 | 
|---|
| 114 |  K ^TMP("PS",$J)
 | 
|---|
| 115 |  Q
 | 
|---|