[613] | 1 | TIULMED1 ; SLC/JM - Active/Recent Med Objects Routine ;2/7/2000
|
---|
| 2 | ;;1.0;TEXT INTEGRATION UTILITIES;**38,73,92,94,202,226**;Jun 20, 1997;Build 1
|
---|
| 3 | ;
|
---|
| 4 | ; All routines here are part of the LIST entry point of TIULMED
|
---|
| 5 | ;
|
---|
| 6 | ADD(TXT) ; Saves TXT in TARGET
|
---|
| 7 | S NEXTLINE=NEXTLINE+1
|
---|
| 8 | I TAB S TXT=" "_TXT
|
---|
| 9 | I TAB,HEADER S TXT=" "_TXT
|
---|
| 10 | S @TARGET@(NEXTLINE,0)=TXT
|
---|
| 11 | Q
|
---|
| 12 | ADDLNUM(TXT) ; Add text with Line Number added to front of string
|
---|
| 13 | S TAB=0
|
---|
| 14 | I HEADER D ADD($E(COUNT_") ",1,5)_TXT) I 1
|
---|
| 15 | E D ADD(TXT)
|
---|
| 16 | S TAB=1
|
---|
| 17 | Q
|
---|
| 18 | ADDL(TXT) ; Add with ADDLNUM on FIRST
|
---|
| 19 | I FIRST D I 1
|
---|
| 20 | .D ADDLNUM(TXT)
|
---|
| 21 | .S FIRST=0
|
---|
| 22 | E D ADD(TXT)
|
---|
| 23 | Q
|
---|
| 24 | ADDMED(XMODE) ; if XMODE creates XSTR, if not add med to TARGET
|
---|
| 25 | N DATA,FIRST,XSUM,XCOUNT,TOPLINE,WSTATUS
|
---|
| 26 | S FIRST=1
|
---|
| 27 | I XMODE S (XSUM,XCOUNT)=0,XSTR=""
|
---|
| 28 | E D
|
---|
| 29 | .S TOPLINE=NEXTLINE+1,DATA="",WSTATUS=0
|
---|
| 30 | .D ADDP(2)
|
---|
| 31 | I TYPE="UD" D I 1 ; Unit Dose Meds
|
---|
| 32 | .I 'XMODE D
|
---|
| 33 | ..I DETAILED D FLUSH S DATA="Give:"
|
---|
| 34 | ..S DATA=DATA_" "
|
---|
| 35 | .I $$PL(6) D ADDP(6) I 1
|
---|
| 36 | .E I $$PL(7) D ADDP(7) I 1
|
---|
| 37 | .E D ADDM("SIG")
|
---|
| 38 | .D ADDM("MDR"),ADDM("SCH")
|
---|
| 39 | .I DETAILED D FLUSH
|
---|
| 40 | .D ADDM("SIO")
|
---|
| 41 | E I TYPE="OP" D I 1 ; Outpatient Meds
|
---|
| 42 | .I 'XMODE,DETAILED D
|
---|
| 43 | ..I $$PL(12) D
|
---|
| 44 | ...S DATA=DATA_" Qty:"
|
---|
| 45 | ...D ADDP(12)
|
---|
| 46 | ..I $$PL(11) D
|
---|
| 47 | ...S DATA=$$STRIP(DATA_" for")
|
---|
| 48 | ...D ADDP(11)
|
---|
| 49 | ...S DATA=$$STRIP(DATA_" days")
|
---|
| 50 | ..D WRAP
|
---|
| 51 | .I $$ML("SIG") D I 1
|
---|
| 52 | ..I 'XMODE,DETAILED S DATA=$$STRIP(DATA_" Sig:")
|
---|
| 53 | ..D ADDM("SIG")
|
---|
| 54 | .E D ADDM("SIO"),ADDM("MDR"),ADDM("SCH")
|
---|
| 55 | E I TYPE="IV" D ; IV meds
|
---|
| 56 | .I DETAILED D FLUSH
|
---|
| 57 | .D ADDM("A")
|
---|
| 58 | .I $$ML("B") D
|
---|
| 59 | ..I 'XMODE S DATA=$$STRIP(DATA_" in")
|
---|
| 60 | ..D ADDM("B")
|
---|
| 61 | .D ADDP(3)
|
---|
| 62 | .I DETAILED D FLUSH
|
---|
| 63 | .;ELR/VMP patch 226 add route and schedule to IV's
|
---|
| 64 | .D ADDM("SIO"),ADDM("MDR"),ADDM("SCH")
|
---|
| 65 | .D FLUSH
|
---|
| 66 | .I 'XMODE D
|
---|
| 67 | ..N I
|
---|
| 68 | ..F I=TOPLINE:1:NEXTLINE S @TARGET@(I,0)=$TR(@TARGET@(I,0),U," ")
|
---|
| 69 | I XMODE D I 1
|
---|
| 70 | .I XSTR="" S XSTR="_"
|
---|
| 71 | .E I $L(XSTR)>80 S XSTR=$E(XCOUNT_"_"_XSUM_"_"_XSTR,1,80)
|
---|
| 72 | E D
|
---|
| 73 | .D FLUSH
|
---|
| 74 | .S WSTATUS=1
|
---|
| 75 | .D ADDP(9)
|
---|
| 76 | .S WSTATUS=0
|
---|
| 77 | .I DETAILED D
|
---|
| 78 | ..D ADDDATE(TOPLINE,$S(MEDTYPE=OUTPTYPE:"Issu",1:"Strt"),15)
|
---|
| 79 | ..I MEDTYPE=OUTPTYPE D I 1
|
---|
| 80 | ...N I
|
---|
| 81 | ...I TOPLINE=NEXTLINE S I=TOPLINE+1
|
---|
| 82 | ...E I $L(@TARGET@(TOPLINE+1,0))<48 S I=TOPLINE+1
|
---|
| 83 | ...E S I=TOPLINE+2
|
---|
| 84 | ...F Q:(I'>NEXTLINE) D ADD(" ")
|
---|
| 85 | ...S @TARGET@(I,0)=$E(@TARGET@(I,0)_SPACE60,1,47)_"Refills: "_+$P(NODE,U,5)
|
---|
| 86 | ...D ADDDATE(TOPLINE+1,"Last",10)
|
---|
| 87 | ...D ADDDATE(TOPLINE+2,"Expr",4)
|
---|
| 88 | ..E D
|
---|
| 89 | ...D ADDDATE(TOPLINE+1,"Stop",4)
|
---|
| 90 | Q
|
---|
| 91 | FDT(PNUM) ;Returns formatted date from piece number
|
---|
| 92 | N X,Y
|
---|
| 93 | S Y=$P(NODE,U,PNUM)
|
---|
| 94 | S X=$E(Y,4,5)_"-"_$E(Y,6,7)_"-"_$E($E(Y,1,3)+1700,3,4)
|
---|
| 95 | Q X
|
---|
| 96 | ADDDATE(LINENUM,TXT,PNUM) ;Add date to TARGET
|
---|
| 97 | I $$PL(PNUM) D
|
---|
| 98 | .F Q:(LINENUM'>NEXTLINE) D ADD(" ")
|
---|
| 99 | .S @TARGET@(LINENUM,0)=$E(@TARGET@(LINENUM,0)_SPACE60,1,60)_TXT_":"_$$FDT(PNUM)
|
---|
| 100 | Q
|
---|
| 101 | XSUMS(STR,NOADD) ; XSUMs a string
|
---|
| 102 | N IDX,LEN
|
---|
| 103 | S LEN=$L(STR) I LEN'>0 Q
|
---|
| 104 | I '$G(NOADD),$L(XSTR)<99 S XSTR=XSTR_STR
|
---|
| 105 | F IDX=1:1:LEN S XCOUNT=XCOUNT+1,XSUM=XSUM+($A(STR,IDX)*XCOUNT)
|
---|
| 106 | Q
|
---|
| 107 | WRAP ; Wraps DATA to the output
|
---|
| 108 | I XMODE Q
|
---|
| 109 | N IDX,LEN,MAX,DATA1,DONE
|
---|
| 110 | S DONE=0
|
---|
| 111 | F Q:DONE D
|
---|
| 112 | .I WSTATUS S MAX=13
|
---|
| 113 | .E D
|
---|
| 114 | ..I FIRST S MAX=41
|
---|
| 115 | ..E S MAX=39
|
---|
| 116 | ..I 'HEADER S MAX=MAX+5
|
---|
| 117 | ..I 'DETAILED S MAX=MAX+13
|
---|
| 118 | .S LEN=$L(DATA)
|
---|
| 119 | .I 'WSTATUS,LEN<MAX S DONE=1 Q
|
---|
| 120 | .I LEN<MAX S IDX=LEN
|
---|
| 121 | .E F IDX=MAX:-1:2 Q:$E(DATA,IDX)=" "
|
---|
| 122 | .I IDX<3 S IDX=MAX-1
|
---|
| 123 | .S DATA1=$$STRIP($E(DATA,1,IDX))
|
---|
| 124 | .I WSTATUS D I 1
|
---|
| 125 | ..S @TARGET@(TOPLINE,0)=$E(@TARGET@(TOPLINE,0)_SPACE60,1,LLEN)_DATA1
|
---|
| 126 | .E D ADDL(DATA1)
|
---|
| 127 | .S DATA=$$STRIP($E(DATA,IDX+1,999))
|
---|
| 128 | .I WSTATUS D
|
---|
| 129 | ..S DONE=1,WSTATUS=0
|
---|
| 130 | ..I $L(DATA)>0 D
|
---|
| 131 | ...I TOPLINE'<NEXTLINE D ADD(" ")
|
---|
| 132 | ...S @TARGET@(TOPLINE+1,0)=$E(@TARGET@(TOPLINE+1,0)_SPACE60,1,LLEN)_DATA
|
---|
| 133 | ...S DATA=""
|
---|
| 134 | Q
|
---|
| 135 | STRIP(X) ; Removes Leading and Trialing Spaces
|
---|
| 136 | F Q:$E(X)'=" " S X=$E(X,2,999)
|
---|
| 137 | F Q:$E(X,$L(X))'=" " S X=$E(X,1,$L(X)-1)
|
---|
| 138 | Q X
|
---|
| 139 | ADDP(PNUM) ; Adds or XSUMs a piece of NODE
|
---|
| 140 | I XMODE D I 1
|
---|
| 141 | .D XSUMS(PNUM,1)
|
---|
| 142 | .D XSUMS($P(NODE,U,PNUM))
|
---|
| 143 | E D
|
---|
| 144 | .N VALUE
|
---|
| 145 | .S VALUE=$P(NODE,U,PNUM)
|
---|
| 146 | .I PNUM=9,VALUE="ACTIVE/SUSP" S VALUE="ACTIVE (S)"
|
---|
| 147 | .S DATA=$$STRIP(DATA_" "_VALUE)
|
---|
| 148 | .D WRAP
|
---|
| 149 | Q
|
---|
| 150 | ADDM(SUB,FORCE) ; Adds or XSUMs Multiple
|
---|
| 151 | N IDX
|
---|
| 152 | S IDX=0
|
---|
| 153 | I XMODE D I 1
|
---|
| 154 | .D XSUMS(SUB,1)
|
---|
| 155 | .F S IDX=$O(^TMP("PS",$J,INDEX,SUB,IDX)) Q:IDX="" D
|
---|
| 156 | ..D XSUMS(^TMP("PS",$J,INDEX,SUB,IDX,0))
|
---|
| 157 | E D
|
---|
| 158 | .I $G(FORCE),DETAILED D FLUSH
|
---|
| 159 | .F S IDX=$O(^TMP("PS",$J,INDEX,SUB,IDX)) Q:IDX="" D
|
---|
| 160 | ..S DATA=$$STRIP(DATA_" "_^TMP("PS",$J,INDEX,SUB,IDX,0))
|
---|
| 161 | ..D WRAP
|
---|
| 162 | Q
|
---|
| 163 | FLUSH ; Flush the DATA buffer
|
---|
| 164 | I 'XMODE,DATA'="" D
|
---|
| 165 | .D WRAP
|
---|
| 166 | .I DATA'="" D ADDL(DATA) S DATA=""
|
---|
| 167 | Q
|
---|
| 168 | PL(PNUM) ;Retuns length of peice
|
---|
| 169 | Q $L($P(NODE,U,PNUM))
|
---|
| 170 | ML(SUB) ;Returns true if multiple exists and contains data
|
---|
| 171 | N IDX,ML
|
---|
| 172 | S (IDX,ML)=0
|
---|
| 173 | F S IDX=$O(^TMP("PS",$J,INDEX,SUB,IDX)) Q:(IDX="")!ML D
|
---|
| 174 | .I $L(^TMP("PS",$J,INDEX,SUB,IDX,0)) S ML=1
|
---|
| 175 | Q ML
|
---|
| 176 | ADDTITLE ;Adds a title line indicating which meds are in the list
|
---|
| 177 | N MSG,ALL,SUP,SUPFX
|
---|
| 178 | I ACTVONLY<2 S MSG="Active"
|
---|
| 179 | E S MSG=""
|
---|
| 180 | I '+ACTVONLY S MSG=MSG_" and "
|
---|
| 181 | I ACTVONLY'=1 S MSG=MSG_"Recently Expired"
|
---|
| 182 | S ALL=ALLMEDS
|
---|
| 183 | I ALL=0 D
|
---|
| 184 | .I ISINP S ALL=2
|
---|
| 185 | .E S ALL=3
|
---|
| 186 | S MSG=MSG_" "
|
---|
| 187 | I ALL'=3 S MSG=MSG_"Inpatient"
|
---|
| 188 | I ALL=1 S MSG=MSG_" and "
|
---|
| 189 | I ALL'=2 S MSG=MSG_"Outpatient"
|
---|
| 190 | S MSG=MSG_" Medications"
|
---|
| 191 | I SUPPLIES S SUPFX="in"
|
---|
| 192 | E S SUPFX="ex"
|
---|
| 193 | S SUPFX="("_SUPFX_"cluding Supplies):"
|
---|
| 194 | I $L(MSG)>51 D I 1
|
---|
| 195 | .D ADD(MSG)
|
---|
| 196 | .D ADD(SUPFX)
|
---|
| 197 | E D
|
---|
| 198 | .S MSG=MSG_" "_SUPFX
|
---|
| 199 | .D ADD(MSG)
|
---|
| 200 | D ADD(" ")
|
---|
| 201 | Q
|
---|
| 202 | WARNING ;Inserts warning about CLASSORT if needed
|
---|
| 203 | I CLASSORT D
|
---|
| 204 | .N MSG
|
---|
| 205 | .D ADD("* * WARNING * * Sorting by drug class may not be accurate!")
|
---|
| 206 | .D ADD("Medications belonging to multiple drug classes will only be listed")
|
---|
| 207 | .S MSG="under a single drug class."
|
---|
| 208 | .I UNKNOWNS S MSG=MSG_" In addition, the system is not able to"
|
---|
| 209 | .D ADD(MSG)
|
---|
| 210 | .I UNKNOWNS D ADD("determine the drug class of some medications.")
|
---|
| 211 | Q
|
---|