| 1 | TIULMED3 ; SLC/MAM - Cont. of Active/Recent Med Objects Routine ;1/30/07
 | 
|---|
| 2 |  ;;1.0;TEXT INTEGRATION UTILITIES;**198,213**;Jun 20, 1997;Build 3
 | 
|---|
| 3 | GETCLASS ; Get Drug Class, filter out supplies  BP/ELR
 | 
|---|
| 4 |  I +DRUGIDX D
 | 
|---|
| 5 |  .N TEMPNODE
 | 
|---|
| 6 |  .S DRUGCLAS=$$DRGCLASS^TIULMED2(DRUGIDX)
 | 
|---|
| 7 |  .S TEMPNODE=U_DRUGCLAS_U_$$DEA^TIULMED2(DRUGIDX)
 | 
|---|
| 8 |  .I 'SUPPLIES,($E(DRUGCLAS,1,2)="XA") D
 | 
|---|
| 9 |  ..S KEEPMED='($P(TEMPNODE,U,3)["S")
 | 
|---|
| 10 |  Q
 | 
|---|
| 11 |  ;
 | 
|---|
| 12 | PATCHSOK() ; Function Checks for Pharmacy Package and required patches
 | 
|---|
| 13 |  ;Returns 1 if ok, 0 if not
 | 
|---|
| 14 |  N CHECKOK S CHECKOK=1
 | 
|---|
| 15 |  I '$L($T(OCL^PSOORRL)) D  S CHECKOK=0 G CKX
 | 
|---|
| 16 |  . D ADD^TIULMED1("Outpatient Pharmacy 7.0 Required for this Object.")
 | 
|---|
| 17 |  . D ADD^TIULMED1(" ")
 | 
|---|
| 18 |  I '$$PATCH^XPDUTL("PSO*7.0*20") D  S CHECKOK=0 G CKX
 | 
|---|
| 19 |  . D ADD^TIULMED1("Outpatient Pharmacy Patch PSO*7.0*20 is required for this Object.")
 | 
|---|
| 20 |  . D ADD^TIULMED1(" ")
 | 
|---|
| 21 |  I '$$PATCH^XPDUTL("PSJ*5.0*22") D  S CHECKOK=0 G CKX
 | 
|---|
| 22 |  . D ADD^TIULMED1("Inpatient Pharmacy Patch PSJ*5.0*22 is required for this Object.")
 | 
|---|
| 23 |  . D ADD^TIULMED1(" ")
 | 
|---|
| 24 | CKX Q CHECKOK
 | 
|---|
| 25 |  ;
 | 
|---|
| 26 | SORTSAVE ;Sort & save Meds Data in TARGET
 | 
|---|
| 27 |  ; *** Check for empty condition ***
 | 
|---|
| 28 |  ;
 | 
|---|
| 29 |  I EMPTY D  G SORTX
 | 
|---|
| 30 |  .D ADD^TIULMED1("No Medications Found")
 | 
|---|
| 31 |  .D ADD^TIULMED1(" ")
 | 
|---|
| 32 |  ;
 | 
|---|
| 33 |  ; *** Sort Meds in "C" temp xref - sort by Med Type, Status
 | 
|---|
| 34 |  ;     Med Name, and reverse issue date, followed by a counter 
 | 
|---|
| 35 |  ;     to avoid erasing meds issued on the same day
 | 
|---|
| 36 |  ;
 | 
|---|
| 37 |  N MED,CNT,XSTR,TIUXSTAT
 | 
|---|
| 38 |  N DATA,NODE
 | 
|---|
| 39 |  S MED="",CNT=1000000
 | 
|---|
| 40 |  F  S MED=$O(@TARGET@("B",MED)) Q:MED=""  D
 | 
|---|
| 41 |  .S (XSTR,TIUXSTAT)=""
 | 
|---|
| 42 |  .F  S XSTR=$O(@TARGET@("B",MED,XSTR)) Q:XSTR=""  D
 | 
|---|
| 43 |  .. F  S TIUXSTAT=$O(@TARGET@("B",MED,XSTR,TIUXSTAT)) Q:TIUXSTAT=""  D
 | 
|---|
| 44 |  ...S NODE=@TARGET@("B",MED,XSTR,TIUXSTAT)
 | 
|---|
| 45 |  ...S DATA=$P(NODE,U,3)_U_$P(NODE,U,5)_U_MED,CNT=CNT+1
 | 
|---|
| 46 |  ...S @TARGET@("C",DATA,(9999999-$P(NODE,U))_CNT)=$P(NODE,U,2)_U_$P(NODE,U,4)
 | 
|---|
| 47 |  ;
 | 
|---|
| 48 |  ; Read sorted data and save final version to TARGET
 | 
|---|
| 49 |  ;
 | 
|---|
| 50 |  N LASTCLAS,LASTMEDT,LASTSTS,COUNT,TOTAL
 | 
|---|
| 51 |  N INDEX,MEDTYPE,STATIDX,DRUGCLAS,TYPE
 | 
|---|
| 52 |  N NODE,LASTMEDT,LASTSTS,TEMP,OLDTAB,OLDHEADR
 | 
|---|
| 53 |  S (DATA,LASTCLAS)="",(LASTMEDT,LASTSTS,COUNT,TOTAL)=0
 | 
|---|
| 54 |  D WARNING^TIULMED1
 | 
|---|
| 55 |  F  S DATA=$O(@TARGET@("C",DATA)) Q:DATA=""  D
 | 
|---|
| 56 |  .S MEDTYPE=$E(DATA),STATIDX=$E(DATA,2)
 | 
|---|
| 57 |  .S DRUGCLAS=$P(DATA,U,2),MED=$P(DATA,U,3),CNT=""
 | 
|---|
| 58 |  .F  S CNT=$O(@TARGET@("C",DATA,CNT)) Q:CNT=""  D
 | 
|---|
| 59 |  ..S INDEX=@TARGET@("C",DATA,CNT)
 | 
|---|
| 60 |  ..S TYPE=$P(INDEX,U,2),INDEX=+INDEX
 | 
|---|
| 61 |  ..S NODE=^TMP("PS",$J,INDEX,0)
 | 
|---|
| 62 |  ..I $P($P(NODE,U),";")["N" S $P(NODE,U,2)="Non-VA "_$P(NODE,U,2)
 | 
|---|
| 63 |  ..I (MEDTYPE'=LASTMEDT)!(STATIDX'=LASTSTS) D  ; Create Header
 | 
|---|
| 64 |  ...I CLASSORT'=2,DRUGCLAS'=" " S LASTCLAS=DRUGCLAS
 | 
|---|
| 65 |  ...I 'HEADER Q
 | 
|---|
| 66 |  ...S LASTMEDT=MEDTYPE,LASTSTS=STATIDX,TAB=0
 | 
|---|
| 67 |  ...I COUNT>0 D ADD^TIULMED1(" ")
 | 
|---|
| 68 |  ...I CLASSORT D ADD^TIULMED1(" ")
 | 
|---|
| 69 |  ...S COUNT=0
 | 
|---|
| 70 |  ...I DETAILED D
 | 
|---|
| 71 |  ....I MEDTYPE=OUTPTYPE D  I 1
 | 
|---|
| 72 |  .....D ADD^TIULMED1(SPACE60_"Issue Date")
 | 
|---|
| 73 |  .....D ADD^TIULMED1($E($E(SPACE60,1,47)_"Status"_SPACE60,1,60)_"Last Fill")
 | 
|---|
| 74 |  ....E  D ADD^TIULMED1(SPACE60_"Start Date")
 | 
|---|
| 75 |  ...I 'ONELIST D
 | 
|---|
| 76 |  ....S TEMP=$S(STATIDX=1:"Active",STATIDX=2:"Pending",1:"Inactive")_" "
 | 
|---|
| 77 |  ...E  S TEMP=""
 | 
|---|
| 78 |  ...S TEMP=TEMP_$S(MEDTYPE=INPTYPE:"Inpatient",MEDTYPE=NVATYPE:"Non-VA",1:"Outpatient")
 | 
|---|
| 79 |  ...S TEMP="     "_TEMP_" Medications"
 | 
|---|
| 80 |  ...I CLASSORT D
 | 
|---|
| 81 |  ....I DETAILED S TEMP=TEMP_" (By Class)"
 | 
|---|
| 82 |  ....E  S TEMP=TEMP_" (By Drug Class)"
 | 
|---|
| 83 |  ...I DETAILED D  I 1
 | 
|---|
| 84 |  ....S TEMP=$E(TEMP_SPACE60,1,47)
 | 
|---|
| 85 |  ....I MEDTYPE=INPTYPE S TEMP=TEMP_"Status"
 | 
|---|
| 86 |  ....E  S TEMP=TEMP_"Refills"
 | 
|---|
| 87 |  ....S TEMP=$E(TEMP_SPACE60,1,60)
 | 
|---|
| 88 |  ....I MEDTYPE=INPTYPE S TEMP=TEMP_"Stop Date"
 | 
|---|
| 89 |  ....E  S TEMP=TEMP_"Expiration"
 | 
|---|
| 90 |  ...E  D
 | 
|---|
| 91 |  ....S TEMP=$E(TEMP_SPACE60,1,60)_"Status"
 | 
|---|
| 92 |  ...D ADD^TIULMED1(TEMP),ADD^TIULMED1(DASH73)
 | 
|---|
| 93 |  ..I CLASSORT,DRUGCLAS'="",DRUGCLAS'=LASTCLAS D
 | 
|---|
| 94 |  ...S LASTCLAS=DRUGCLAS,OLDTAB=TAB,OLDHEADR=HEADER
 | 
|---|
| 95 |  ...S (TAB,HEADER)=0
 | 
|---|
| 96 |  ...I COUNT>0 D ADD^TIULMED1(" ")
 | 
|---|
| 97 |  ...I (CLASSORT=2)!(DRUGCLAS=" ") D  I 1
 | 
|---|
| 98 |  ....I DRUGCLAS=" " S TEMP="   ====== Drug Class Unknown "
 | 
|---|
| 99 |  ....E  S TEMP="   ====== Drug Class: "_DRUGCLAS_" "
 | 
|---|
| 100 |  ...E  S TEMP="   "
 | 
|---|
| 101 |  ...S TEMP=$E(TEMP_DASH73,1,LLEN-2)
 | 
|---|
| 102 |  ...D ADD^TIULMED1(TEMP)
 | 
|---|
| 103 |  ...S HEADER=OLDHEADR,TAB=OLDTAB
 | 
|---|
| 104 |  ..S COUNT=COUNT+1,TOTAL=TOTAL+1
 | 
|---|
| 105 |  ..D ADDMED^TIULMED1(0)
 | 
|---|
| 106 |  I COUNT'=TOTAL D
 | 
|---|
| 107 |  .S TAB=0
 | 
|---|
| 108 |  .D ADD^TIULMED1(" ")
 | 
|---|
| 109 |  .D ADD^TIULMED1(TOTAL_" Total Medications")
 | 
|---|
| 110 | SORTX ;
 | 
|---|
| 111 |  Q
 | 
|---|
| 112 |  ;
 | 
|---|