| 1 | PSGMUTL ;BIR/MV-UTLILITY USE FOR THE MAR AND MEDWS. ;15 SEP 97 / 2:10 PM 
 | 
|---|
| 2 |  ;;5.0; INPATIENT MEDICATIONS ;**50,104,110,111,131**;16 DEC 97
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 |  ; Reference to ^PS(55 is supported by DBIA 2191.
 | 
|---|
| 5 |  ; 
 | 
|---|
| 6 | MARFORM ;Prompt for the MAR form (Blank and Non-blank)
 | 
|---|
| 7 |  S DIR(0)="SA^1:Print Blank MARs only;2:Print Non-Blank MARs only;3:Print both Blank and Non-Blank MARs"
 | 
|---|
| 8 |  S DIR("A")="Select the MAR forms: ",DIR("B")="3"
 | 
|---|
| 9 |  S DIR("?")=""
 | 
|---|
| 10 |  S DIR("?",1)="Enter 1 to print BLANK (no data) MARs for the patient(s) you select."
 | 
|---|
| 11 |  S DIR("?",2)="Enter 2 to print MARs complete with orders."
 | 
|---|
| 12 |  S DIR("?",3)="Enter 3 to print both the blank MARs and the MARs complete with orders."
 | 
|---|
| 13 |  S DIR("?",4)="Enter an  '^' to exit this option now."
 | 
|---|
| 14 |  D ^DIR S PSGMARB=$S($D(DIRUT):0,1:Y)
 | 
|---|
| 15 |  Q
 | 
|---|
| 16 | BLANK(LEN) ;
 | 
|---|
| 17 |  NEW X
 | 
|---|
| 18 |  S $P(X," ",LEN)=" "
 | 
|---|
| 19 |  Q $G(X)
 | 
|---|
| 20 |  ;
 | 
|---|
| 21 | TXT(TXT,LEN)   ;
 | 
|---|
| 22 |  ;* Input: TXT = TXT string
 | 
|---|
| 23 |  ;*        LEN = format length
 | 
|---|
| 24 |  ;* Output: MARX array.
 | 
|---|
| 25 |  ;*
 | 
|---|
| 26 |  NEW OLD,X1,Y D SPLIT K MARX
 | 
|---|
| 27 |  S X=0,X1=1,Y="" F  S X=$O(OLD(X)) Q:'X  D
 | 
|---|
| 28 |  . I $L(Y_OLD(X))>LEN S MARX(X1)=Y,X1=X1+1,Y="" D
 | 
|---|
| 29 |  .. I $E(MARX(X1-1),$L(MARX(X1-1)))'=" " Q
 | 
|---|
| 30 |  .. S MARX(X1-1)=$E(MARX(X1-1),1,$L(MARX(X1-1))-1)
 | 
|---|
| 31 |  . S Y=Y_OLD(X)
 | 
|---|
| 32 |  S:Y]"" MARX(X1)=Y
 | 
|---|
| 33 |  S MARX=X1
 | 
|---|
| 34 |  Q
 | 
|---|
| 35 |  ;
 | 
|---|
| 36 | SPLIT ;* Split a word string into individual words.
 | 
|---|
| 37 |  ;* Output: OLD(X)
 | 
|---|
| 38 |  ;*
 | 
|---|
| 39 |  NEW BSD,NEW,X,X1,Y
 | 
|---|
| 40 |  S OLD(1)=TXT Q:$L(TXT)<LEN
 | 
|---|
| 41 |  F BSD=" ","/","-" S:'$O(OLD(0)) OLD(1)=TXT D:TXT[BSD DELIM(BSD)
 | 
|---|
| 42 |  I '$O(OLD(1)),($L(TXT)>LEN) D LEN(1,TXT) K OLD D
 | 
|---|
| 43 |  . F X=0:0 S X=$O(NEW(X)) Q:'X  S OLD(X)=NEW(X)
 | 
|---|
| 44 |  Q
 | 
|---|
| 45 | LEN(X1,OLD) ;* Wrap word around if it doesn't fit the display length
 | 
|---|
| 46 |  NEW X
 | 
|---|
| 47 |  Q:$L(OLD)'>LEN
 | 
|---|
| 48 |  S X=$E(OLD,1,($L(OLD)-1)) I X["/"!((X["-")&(X'["ON-CALL")) Q
 | 
|---|
| 49 |  I $L(OLD)>LEN F X=1:1 S NEW(X1)=$E(OLD,((LEN*X)-LEN+1),(LEN*X)),X1=X1+1 Q:($L(OLD)'>(LEN*X))
 | 
|---|
| 50 |  Q
 | 
|---|
| 51 | DELIM(BSD) ;* BSD=" ","/","-"
 | 
|---|
| 52 |  K NEW
 | 
|---|
| 53 |  S X=0,X1=0 F  S X=$O(OLD(X)) Q:'X  K ONCALL F Y=1:1:$L(OLD(X),BSD) D
 | 
|---|
| 54 |  . Q:($G(ONCALL)=Y)   ; If ON-CALL is delimited string, ignore
 | 
|---|
| 55 |  . S X1=X1+1
 | 
|---|
| 56 |  . S NEW(X1)=$P(OLD(X),BSD,Y)
 | 
|---|
| 57 |  . I $L(OLD(X),BSD)>1,(Y<$L(OLD(X),BSD)) S NEW(X1)=NEW(X1)_BSD
 | 
|---|
| 58 |  . I BSD="-",OLD(X)["ON-CALL" D   ;If dashes, check for ON-CALL
 | 
|---|
| 59 |  .. S NEW(X1)=OLD(X),ONCALL=Y+1   ;Keep ON-CALL intact
 | 
|---|
| 60 |  . D LEN(.X1,NEW(X1))
 | 
|---|
| 61 |  K OLD F X=0:0 S X=$O(NEW(X)) Q:'X  S OLD(X)=NEW(X)
 | 
|---|
| 62 |  Q
 | 
|---|
| 63 |  ;
 | 
|---|
| 64 | MARLB(LEN)         ;
 | 
|---|
| 65 |  ;;;LEN=LENGTH
 | 
|---|
| 66 |  NEW L,X,TXT K MARLB,DRUGNAME,ON S ON=PSGORD D ONHOLD^PSGMMAR2
 | 
|---|
| 67 |  S L=1
 | 
|---|
| 68 |  S MARLB(L)=$$BLANK(6)_"|"_$$BLANK(12)_"|",L=L+1
 | 
|---|
| 69 |  I $G(PST)["CZ"!($G(PST)["OZ") S MARLB(L)=PSGLOD_" | P E N D I N G"
 | 
|---|
| 70 |  E  S MARLB(L)=PSGLOD_" |"_PSGLSD_" |"_PSGLFD
 | 
|---|
| 71 |  I $G(ONHOLD) S MARLB(L)=PSGLOD_" | O N  H O L D "
 | 
|---|
| 72 |  S MARLB(L)=$$SETSTR^VALM1("("_$E(PPN)_$E(PSSN,8,12)_")",MARLB(L),40,7)
 | 
|---|
| 73 |  S L=L+1
 | 
|---|
| 74 |  D DRGDISP^PSJLMUT1(PSGP,+PSGORD_$S(PSGORD["P":"P",1:"U"),45,39,.DRUGNAME,0)
 | 
|---|
| 75 |  F X=0:0 S X=$O(DRUGNAME(X)) Q:'X  S MARLB(L)=DRUGNAME(X)_$S(X=1:$$BLANK(47-$L(DRUGNAME(X)))_PSGLST,1:""),L=L+1
 | 
|---|
| 76 |  D TXT^PSGMUTL(PSGLSI,LEN)
 | 
|---|
| 77 |  S X=0 F  S X=$O(MARX(X)) Q:'X  S MARLB(L)=MARX(X),L=L+1
 | 
|---|
| 78 |  K MARX
 | 
|---|
| 79 |  I $G(PSGP),$G(PSGORD),(PSGLRN]""),(PSGLRN'="O") D
 | 
|---|
| 80 |  .N ND4 S ND4=$S(PSGORD["U":$G(^PS(55,PSGP,5,+PSGORD,4)),PSGORD["P":$G(^PS(53.1,+PSGORD,4)),1:"")
 | 
|---|
| 81 |  .N PSGLREN,PSGLRNDT S PSGLREN=+$$LASTREN^PSJLMPRI(PSGP,PSGORD),PSGLRNDT=$P(ND4,"^",2) I PSGLREN,PSGLRNDT I PSGLREN>PSGLRNDT S PSGLRN=""
 | 
|---|
| 82 |  S X=$E("WS",1,PSGLWS*2)_$S(PSGLSM:$E("HSM",PSGLSM,3),1:"")_$E("NF",1,PSGLNF*2)
 | 
|---|
| 83 |  I X="",($L(MARLB(L-1))<30),(L=7) S L=L-1 D
 | 
|---|
| 84 |  . S X=MARLB(L)_$$BLANK(29-$L(MARLB(L)))_"RPH: "_$S(PSGLRPH]""&(PSGLRPH'="0"):PSGLRPH,1:"_____")
 | 
|---|
| 85 |  . S X=X_$$BLANK(39-$L(X))_"RN: "_$S(PSGLRN]""&(PSGLRN'="0"):PSGLRN,1:"_____")
 | 
|---|
| 86 |  . S MARLB(L)=X
 | 
|---|
| 87 |  E  D
 | 
|---|
| 88 |  . S:L=5 MARLB(5)="",L=6
 | 
|---|
| 89 |  . S X=$E("WS",1,PSGLWS*2)
 | 
|---|
| 90 |  . S X=X_$$BLANK(4-$L(X))_$S(PSGLSM:$E("HSM",PSGLSM,3),1:"")
 | 
|---|
| 91 |  . S X=X_$$BLANK(8-$L(X))_$E("NF",1,PSGLNF*2)
 | 
|---|
| 92 |  . S X=X_$$BLANK(29-$L(X))_"RPH: "_$S(PSGLRPH]""&(PSGLRPH'="0"):PSGLRPH,1:"____")
 | 
|---|
| 93 |  . S X=X_$$BLANK(39-$L(X))_"RN: "_$S(PSGLRN]""&(PSGLRN'="0"):PSGLRN,1:"_____")
 | 
|---|
| 94 |  . S MARLB(L)=X
 | 
|---|
| 95 |  S MARLB=L
 | 
|---|
| 96 |  I MARLB>6!($G(TS)>6) D MARLB2
 | 
|---|
| 97 |  Q
 | 
|---|
| 98 |  ;
 | 
|---|
| 99 | MARLB2 ;Split array into 2 labels.
 | 
|---|
| 100 |  ;TS array must be defined. (TS^PSGMAR3(ADMIN TIMES))
 | 
|---|
| 101 |  NEW INIT,X,Y
 | 
|---|
| 102 |  S INIT=MARLB(MARLB),Y=6
 | 
|---|
| 103 |  F X=6:1:MARLB S X(X)=MARLB(X)
 | 
|---|
| 104 |  F X=6:1:($S(MARLB>TS:MARLB,1:TS)-1) D
 | 
|---|
| 105 |  . I (X#6)=0 S MARLB(X)="See next label for continuation" Q
 | 
|---|
| 106 |  . I Y<(MARLB) S MARLB(X)=X(Y),Y=Y+1 Q
 | 
|---|
| 107 |  . S MARLB(X)=""
 | 
|---|
| 108 |  S X=X+1 F Y=Y:1:MARLB-1 S MARLB(X)=$G(X(Y)),X=X+1
 | 
|---|
| 109 |  F X=X:0 Q:(X#6)=0  S MARLB(X)="",X=X+1
 | 
|---|
| 110 |  S MARLB(X)=INIT,MARLB=X
 | 
|---|
| 111 |  Q
 | 
|---|
| 112 |  N X F X=6:1:MARLB S X(X+1)=MARLB(X)
 | 
|---|
| 113 |  S MARLB(6)="See next label for continuation"
 | 
|---|
| 114 |  F X=7:1:MARLB S MARLB(X)=X(X)
 | 
|---|
| 115 |  F X=X+1:1:11 S MARLB(X)=""
 | 
|---|
| 116 |  S MARLB(12)=X(MARLB+1)
 | 
|---|
| 117 |  S MARLB=12
 | 
|---|
| 118 |  Q
 | 
|---|
| 119 |  ;
 | 
|---|