| 1 | PSONVARP ;BHM/MFR - Non-VA Med Usage Report - Input ;04/10/03
 | 
|---|
| 2 |  ;;7.0;OUTPATIENT PHARMACY;**132,118**;13 Feb 97
 | 
|---|
| 3 |  ;External reference to ^%DT is supported by DBIA 10003
 | 
|---|
| 4 |  ;External reference to ^%ZTLOAD is supported by DBIA 10063
 | 
|---|
| 5 |  ;External reference to ^%ZIS is supported by DBIA 10086
 | 
|---|
| 6 |  ;External reference to ^DIR is supported by DBIA 10026
 | 
|---|
| 7 |  ;External reference to ^XLFSTR is supported by DBIA 10104
 | 
|---|
| 8 |  ;
 | 
|---|
| 9 | HID ; - Entrhy point from the Hidden Action in the Medication Profile
 | 
|---|
| 10 |  N PSOHDFLG S PSOHDFLG=1
 | 
|---|
| 11 |  ;
 | 
|---|
| 12 | EN N PSOSD,PSOED,PSOST,PSOSRT,PSOAPT,PSOAOI,PSOST,PSOOC,PSOAPT,PSOAOI,I,Y
 | 
|---|
| 13 |  N OK,X,C,%DT
 | 
|---|
| 14 |  ;
 | 
|---|
| 15 |  ; - Ask for FROM DATE DOCUMENTED
 | 
|---|
| 16 |  S %DT(0)=-DT,%DT="AEP",%DT("A")="FROM DATE DOCUMENTED: "
 | 
|---|
| 17 |  W ! D ^%DT I Y<0!($D(DTOUT)) G END
 | 
|---|
| 18 |  S PSOSD=Y\1-.00001
 | 
|---|
| 19 |  ;
 | 
|---|
| 20 | ENDT ; - Ask for TO DATE DOCUMENTED
 | 
|---|
| 21 |  S %DT(0)=PSOSD+1\1,%DT("A")="TO DATE DOCUMENTED: "
 | 
|---|
| 22 |  W ! D ^%DT I Y<0!($D(DTOUT)) G END
 | 
|---|
| 23 |  S PSOED=Y\1+.99999
 | 
|---|
| 24 |  ;
 | 
|---|
| 25 |  ; - Reported called from a Hidden Action menu
 | 
|---|
| 26 |  I $G(PSOHDFLG) D  G DEV
 | 
|---|
| 27 |  . S PSOPT(DFN)="",PSOAPT=0,PSOAOI=1,PSOST="B",PSOOC="B",PSOSRT="4,2"
 | 
|---|
| 28 |  ;
 | 
|---|
| 29 | SORT ; - Ask for SORT BY
 | 
|---|
| 30 |  K DIR S DIR("B")="PATIENT NAME" D HL1("A")
 | 
|---|
| 31 | SORT1 S PSOSRT="",(PSOAPT,PSOAOI)=1,(PSOST,PSOOC)="B"
 | 
|---|
| 32 |  S DIR("A")="SORT BY",DIR(0)="FO" D HL1("?")
 | 
|---|
| 33 |  W ! D ^DIR K DIR I $D(DIRUT) G END
 | 
|---|
| 34 |  ;
 | 
|---|
| 35 |  S OK=1,C=15 W !
 | 
|---|
| 36 |  F I=1:1:$L(Y,",") D
 | 
|---|
| 37 |  . S X=$P(Y,",",I) S:X'?.N X=$$TRNS(X) I PSOSRT[X Q
 | 
|---|
| 38 |  . W !?(C-10),$S(I=1:"SORT BY ",1:"THEN BY ") S C=C+5
 | 
|---|
| 39 |  . I X<1!(X>5) W X,"???",$C(7) S OK=0 Q
 | 
|---|
| 40 |  . W $P("PATIENT NAME^ORDERABLE ITEM^DATE DOCUMENTED^STATUS^ORDER CHECKS","^",X)
 | 
|---|
| 41 |  . S PSOSRT=PSOSRT_","_X
 | 
|---|
| 42 |  I 'OK S DIR("B")=Y G SORT1
 | 
|---|
| 43 |  S $E(PSOSRT)=""
 | 
|---|
| 44 |  ;
 | 
|---|
| 45 |  S OK=1
 | 
|---|
| 46 |  F I=1:1:$L(PSOSRT,",") D  I 'OK Q
 | 
|---|
| 47 |  . S X=$P(PSOSRT,",",I) D:X'=3 @("SRT"_X)
 | 
|---|
| 48 |  I 'OK S DIR("B")="PATIENT NAME" G SORT1
 | 
|---|
| 49 |  ;
 | 
|---|
| 50 | DEV W ! K %ZIS,IOP,POP,ZTSK S %ZIS="QM" D ^%ZIS K %ZIS I POP G END
 | 
|---|
| 51 |  I $D(IO("Q")) D  G END
 | 
|---|
| 52 |  . N G K IO("Q"),ZTIO,ZTSAVE,ZTDTH,ZTSK
 | 
|---|
| 53 |  . S ZTRTN="EN^PSONVAR1",ZTDESC="Non-VA Meds Usage Report"
 | 
|---|
| 54 |  . F G="PSOSD","PSOED","PSOSRT","PSOPT","PSOOI" S:$D(@G) ZTSAVE(G)=""
 | 
|---|
| 55 |  . F G="PSOST","PSOOC","PSOAPT","PSOAOI" S:$D(@G) ZTSAVE(G)=""
 | 
|---|
| 56 |  . S:$D(PSOPT) ZTSAVE("PSOPT(")="" S:$D(PSOOI) ZTSAVE("PSOOI(")=""
 | 
|---|
| 57 |  . D ^%ZTLOAD W:$D(ZTSK) !,"Report is Queued to print !!" K ZTSK
 | 
|---|
| 58 |  ;
 | 
|---|
| 59 |  G EN^PSONVAR1
 | 
|---|
| 60 |  ;
 | 
|---|
| 61 | END Q
 | 
|---|
| 62 |  ;
 | 
|---|
| 63 | SRT1 ; - Selection of PATIENTS to print on the Report
 | 
|---|
| 64 |  N DIC,X,I K PSOPT S PSOAPT=0
 | 
|---|
| 65 |  W !!,?5,"You may select a single or multiple PATIENTS,"
 | 
|---|
| 66 |  W !,?5,"or enter ^ALL to select all PATIENTS.",!
 | 
|---|
| 67 |  S DIC=2,DIC(0)="QEAM",DIC("A")="     PATIENT: "
 | 
|---|
| 68 |  F  D ^DIC Q:Y<0  S:'$$DEAD(+Y,1) PSOPT(+Y)="" K DIC("B")
 | 
|---|
| 69 |  I X="^ALL" S PSOAPT=1 K PSOPT,DUOUT Q
 | 
|---|
| 70 |  I $D(DUOUT)!($D(DTOUT)) S OK=0 Q
 | 
|---|
| 71 |  I '$D(PSOPT),Y<0 S OK=0 Q
 | 
|---|
| 72 |  Q
 | 
|---|
| 73 |  ;
 | 
|---|
| 74 | SRT2 ; - Selection of ORDERABLE ITEMS to print on the Report
 | 
|---|
| 75 |  N DIC,X,I K PSOOI S PSOAOI=0
 | 
|---|
| 76 |  W !!,?5,"You may select a single or multiple ORDERABLE ITEMS,"
 | 
|---|
| 77 |  W !,?5,"or enter ^ALL to select all ORDERABLE ITEMS.",!
 | 
|---|
| 78 |  S DIC=50.7,DIC(0)="QEAM",DIC("A")="     ORDERABLE ITEM: "
 | 
|---|
| 79 |  F  D ^DIC Q:Y<0  S PSOOI(+Y)="" K DIC("B")
 | 
|---|
| 80 |  I X="^ALL" S PSOAOI=1 K PSOOI,DUOUT Q
 | 
|---|
| 81 |  I $D(DUOUT)!($D(DTOUT)) S OK=0 Q
 | 
|---|
| 82 |  I '$D(PSOOI)&(Y<0) S OK=0 Q
 | 
|---|
| 83 |  Q
 | 
|---|
| 84 |  ;
 | 
|---|
| 85 | SRT4 ; - Selection of STATUS to print on the Report
 | 
|---|
| 86 |  N DIR,X,I K PSOST
 | 
|---|
| 87 |  W !!,?5,"You may select (A)CTIVE, (D)ISCONTINUED or (B)OTH status.",!
 | 
|---|
| 88 |  S DIR(0)="SAO^A:ACTIVE;D:DISCONTINUED;B:BOTH"
 | 
|---|
| 89 |  S DIR("A")="     STATUS: ",DIR("B")="ACTIVE" D ^DIR
 | 
|---|
| 90 |  I $D(DIRUT) S OK=0 Q
 | 
|---|
| 91 |  S PSOST=Y
 | 
|---|
| 92 |  Q
 | 
|---|
| 93 |  ;
 | 
|---|
| 94 | SRT5 ; - Selection of ORDER CHECKS to print on the Report
 | 
|---|
| 95 |  N DIR,X,OP1,OP2 K PSOOC
 | 
|---|
| 96 |  S OP1="ORDERS WITH ORDER CHECKS ONLY"
 | 
|---|
| 97 |  S OP2="ORDERS WITHOUT ORDER CHECKS ONLY"
 | 
|---|
| 98 |  W !!,?5,"You may select 'Y' to print ",OP1,","
 | 
|---|
| 99 |  W !?5,"'N' to print ",OP2," or 'B' for BOTH.",!
 | 
|---|
| 100 |  S DIR(0)="SAO^Y:"_OP1_";N:"_OP2_";B:BOTH"
 | 
|---|
| 101 |  S DIR("A")="     ORDER CHECKS: ",DIR("B")="BOTH" D ^DIR
 | 
|---|
| 102 |  I $D(DIRUT) S OK=0 Q
 | 
|---|
| 103 |  S PSOOC=Y
 | 
|---|
| 104 |  Q
 | 
|---|
| 105 |  ;
 | 
|---|
| 106 | TRNS(X) ; - Translates Alpha into the corresponding Sorting Code
 | 
|---|
| 107 |  N L,UPX S L=$L(X),UPX=$$UP^XLFSTR(X)
 | 
|---|
| 108 |  I $E("PATIENT NAME",1,L)=UPX Q 1
 | 
|---|
| 109 |  I $E("ORDERABLE ITEM",1,L)=UPX Q 2
 | 
|---|
| 110 |  I $E("DATE DOCUMENTED",1,L)=UPX Q 3
 | 
|---|
| 111 |  I $E("STATUS",1,L)=UPX Q 4
 | 
|---|
| 112 |  I $E("ORDER CHECKS",1,L)=UPX Q 5
 | 
|---|
| 113 |  Q X
 | 
|---|
| 114 |  ;
 | 
|---|
| 115 | DEAD(DFN,DSPL) ; Check if Patient has a Date Of Death on File
 | 
|---|
| 116 |  N VADM,Y
 | 
|---|
| 117 |  I '$G(DFN) Q 0
 | 
|---|
| 118 |  D DEM^VADPT I $G(VADM(6))="" Q 0
 | 
|---|
| 119 |  I $G(DSPL) W !?10,$P($G(VADM(1)),"^")," (",$P($G(VADM(2)),"^",2),") DIED ",$P($G(VADM(6)),"^",2),$C(7)
 | 
|---|
| 120 |  Q 1
 | 
|---|
| 121 |  ;
 | 
|---|
| 122 | HL1(S) ; - Help for the SORT BY prompt
 | 
|---|
| 123 |  S DIR(S,1)="    Enter the SORT field(s) for this Report:"
 | 
|---|
| 124 |  S DIR(S,2)=" "
 | 
|---|
| 125 |  S DIR(S,3)="       1 - PATIENT NAME"
 | 
|---|
| 126 |  S DIR(S,4)="       2 - ORDERABLE ITEM"
 | 
|---|
| 127 |  S DIR(S,5)="       3 - DATE DOCUMENTED"
 | 
|---|
| 128 |  S DIR(S,6)="       4 - STATUS"
 | 
|---|
| 129 |  S DIR(S,7)="       5 - ORDER CHECKS"
 | 
|---|
| 130 |  S DIR(S,8)=" "
 | 
|---|
| 131 |  S DIR(S,9)="    Or any combination of the above, separated by comma,"
 | 
|---|
| 132 |  S DIR(S,10)="    as in these examples:"
 | 
|---|
| 133 |  S DIR(S,11)=" "
 | 
|---|
| 134 |  S DIR(S,12)="       2,1  - BY ORDERABLE ITEM, THEN BY PATIENT NAME"
 | 
|---|
| 135 |  S DIR(S,13)="      5,1,4 - BY ORDER CHECKS, THEN BY PATIENT NAME, THEN BY STATUS"
 | 
|---|
| 136 |  S DIR(S,14)=" "
 | 
|---|
| 137 |  S DIR(S)=" "
 | 
|---|
| 138 |  Q
 | 
|---|