| [613] | 1 | PSONVAR1 ;BHM/MFR - Non-VA Med Usage Report ;04/10/03 | 
|---|
|  | 2 | ;;7.0;OUTPATIENT PHARMACY;**132,118**;13 Feb 97 | 
|---|
|  | 3 | ;External reference to File ^PS(55 supported by DBIA 2228 | 
|---|
|  | 4 | ;External reference to $$GET1^DIQ is supported by DBIA 2056 | 
|---|
|  | 5 | ;External reference to ^VADPT is supported by DBIA 10061 | 
|---|
|  | 6 | ;External reference to ^XLFDT is supported by DBIA 10103 | 
|---|
|  | 7 | ;External reference to ^%ZISC is supported by DBIA 10089 | 
|---|
|  | 8 | ; | 
|---|
|  | 9 | EN N DATE,DFN,ORD,PAG,PCNT,PRTD,OINAM,PNAM,I,J,Y,X,C,XX,S1,S2,S3,S4,S5,OCNT | 
|---|
|  | 10 | N OCK,OK,STS,SUB,SP1,SP2,SPF | 
|---|
|  | 11 | ; | 
|---|
|  | 12 | U IO K ^TMP("PSONV",$J),^TMP("PSOCNT",$J) | 
|---|
|  | 13 | S SPF=0,(SP1,SP2)="",$P(SP1,"=",80)="",$P(SP2,"-",80)="" | 
|---|
|  | 14 | ; | 
|---|
|  | 15 | ; - Loop through the Non-VA Med orders x-reference | 
|---|
|  | 16 | S DATE=PSOSD,(DFN,ORD)="",(PCNT,OCNT,PRTD)=0 K DIRUT | 
|---|
|  | 17 | DATE S DATE=$O(^PS(55,"ADCDT",DATE)) G NEXT:DATE=""!(DATE>PSOED) | 
|---|
|  | 18 | W:SPF SP1 | 
|---|
|  | 19 | ; | 
|---|
|  | 20 | DFN I PSOAPT S DFN=$O(^PS(55,"ADCDT",DATE,DFN)) G DATE:DFN="" | 
|---|
|  | 21 | I 'PSOAPT S DFN=$O(PSOPT(DFN)) G DATE:DFN=""        ;Patient Filter | 
|---|
|  | 22 | ; | 
|---|
|  | 23 | I $$DEAD^PSONVARP(DFN) G DFN                        ;Patient is Dead | 
|---|
|  | 24 | ; | 
|---|
|  | 25 | ORD S ORD=$O(^PS(55,"ADCDT",DATE,DFN,ORD)) G DFN:ORD="" | 
|---|
|  | 26 | S XX=$G(^PS(55,DFN,"NVA",ORD,0)) | 
|---|
|  | 27 | I 'PSOAOI,'$D(PSOOI(+$P(XX,"^"))) G ORD             ;OI Filter | 
|---|
|  | 28 | I '$P(XX,"^",6),PSOST="D" G ORD                     ;Status Filter | 
|---|
|  | 29 | I $P(XX,"^",6),PSOST="A" G ORD | 
|---|
|  | 30 | I '$D(^PS(55,DFN,"NVA",ORD,"OCK")),PSOOC="Y" G ORD  ;Order Checks Filter | 
|---|
|  | 31 | I $D(^PS(55,DFN,"NVA",ORD,"OCK")),PSOOC="N" G ORD | 
|---|
|  | 32 | ; | 
|---|
|  | 33 | I PSOSRT=3 D  G CLOSE:$D(DIRUT),ORD                 ;If not Sorting, | 
|---|
|  | 34 | . I $Y>(IOSL-9) D HDR I $D(DIRUT) Q                 ;Print the Report | 
|---|
|  | 35 | . D PRINT(DFN,ORD) Q:$D(DIRUT)  S SPF=1             ;Then G ORD | 
|---|
|  | 36 | ; | 
|---|
|  | 37 | I PSOSRT[1 S PNAM=$$GET1^DIQ(2,DFN,.01)             ;Retrieving Patient | 
|---|
|  | 38 | I PSOSRT[2 S OINAM=$$GET1^DIQ(50.7,+$P(XX,"^"),.01) ;Name and Orderable | 
|---|
|  | 39 | S:$G(PNAM)="" PNAM=0 S:$G(OINAM)="" OINAM=0         ;Item Name | 
|---|
|  | 40 | S (S1,S2,S3,S4,S5)=0 | 
|---|
|  | 41 | F I=1:1:$L(PSOSRT,",") D | 
|---|
|  | 42 | . S Y=$P(PSOSRT,",",I),STS=+$P(XX,"^",6) | 
|---|
|  | 43 | . S OCK=$S($D(^PS(55,DFN,"NVA",ORD,"OCK")):1,1:2) | 
|---|
|  | 44 | . S @("S"_I)=$S(Y=1:PNAM,Y=2:OINAM,Y=3:DATE,Y=4:+STS,Y=5:OCK) | 
|---|
|  | 45 | S ^TMP("PSONV",$J,S1,S2,S3,S4,S5,DFN,ORD)="" | 
|---|
|  | 46 | G ORD | 
|---|
|  | 47 | ; | 
|---|
|  | 48 | NEXT ; - If not Sorting (already printed), SKIP, otherwise, print the report | 
|---|
|  | 49 | I PSOSRT="" G NDTP | 
|---|
|  | 50 | S (S1,S2,S3,S4,S5,DFN,ORD)="" | 
|---|
|  | 51 | F  S S1=$O(^TMP("PSONV",$J,S1)) Q:S1=""  D  Q:$D(DIRUT) | 
|---|
|  | 52 | . F  S S2=$O(^TMP("PSONV",$J,S1,S2)) Q:S2=""  D  Q:$D(DIRUT) | 
|---|
|  | 53 | . . F  S S3=$O(^TMP("PSONV",$J,S1,S2,S3)) Q:S3=""  D  Q:$D(DIRUT) | 
|---|
|  | 54 | . . . F  S S4=$O(^TMP("PSONV",$J,S1,S2,S3,S4)) Q:S4=""  D  Q:$D(DIRUT) | 
|---|
|  | 55 | . . . . F  S S5=$O(^TMP("PSONV",$J,S1,S2,S3,S4,S5)) Q:S5=""  D  Q:$D(DIRUT) | 
|---|
|  | 56 | . . . . . F  S DFN=$O(^TMP("PSONV",$J,S1,S2,S3,S4,S5,DFN)) Q:DFN=""  D  Q:$D(DIRUT) | 
|---|
|  | 57 | . . . . . . F   S ORD=$O(^TMP("PSONV",$J,S1,S2,S3,S4,S5,DFN,ORD)) Q:ORD=""  D  Q:$D(DIRUT) | 
|---|
|  | 58 | . . . . . . . I $Y>(IOSL-12) D HDR I $D(DIRUT) Q | 
|---|
|  | 59 | . . . . . . . D PRINT(DFN,ORD) | 
|---|
|  | 60 | . . I '$D(DIRUT),S2'=0,$O(^TMP("PSONV",$J,S1,S2))'="" W SP2 | 
|---|
|  | 61 | . I '$D(DIRUT),$O(^TMP("PSONV",$J,S1))'="" W SP1 | 
|---|
|  | 62 | G CLOSE:$D(DIRUT) | 
|---|
|  | 63 | ; | 
|---|
|  | 64 | NDTP I 'PRTD D HDR W !!?18,"**********   NO DATA TO PRINT   **********" | 
|---|
|  | 65 | I PRTD D | 
|---|
|  | 66 | . W SP1 | 
|---|
|  | 67 | . W !,"Total: ",PCNT," patient",$S(PCNT>1:"s",1:"") | 
|---|
|  | 68 | . W " and ",OCNT," order",$S(OCNT>1:"s",1:""),"." | 
|---|
|  | 69 | ; | 
|---|
|  | 70 | CLOSE D ^%ZISC S:$D(ZTQUEUED) ZTREQ="@" | 
|---|
|  | 71 | END K ^TMP("PSONV",$J),^TMP("PSOCNT",$J) | 
|---|
|  | 72 | Q | 
|---|
|  | 73 | ; | 
|---|
|  | 74 | PRINT(DFN,ORD) ; - Print a Non-VA Med Order | 
|---|
|  | 75 | ;Input: DFN-Patient;ORD-Non-VA Order# | 
|---|
|  | 76 | N X,XX,K,OI,OIX,OINAM,DGNAM,PNAM,PSSN,CLNAM,PRV,I,J,Z,TXT,VAPA,VADM,SCH | 
|---|
|  | 77 | N STR,OCK | 
|---|
|  | 78 | ; | 
|---|
|  | 79 | I '$D(^PS(55,DFN,"NVA",ORD)) Q | 
|---|
|  | 80 | I '$G(PAG) D HDR I $D(DIRUT) Q | 
|---|
|  | 81 | ; | 
|---|
|  | 82 | S XX=^PS(55,DFN,"NVA",ORD,0),OINAM=$$GET1^DIQ(50.7,+$P(XX,"^"),.01) | 
|---|
|  | 83 | S DGNAM="" I $P(XX,"^",2) S DGNAM=$$GET1^DIQ(50,+$P(XX,"^",2),.01) | 
|---|
|  | 84 | D DEM^VADPT,ADD^VADPT S PNAM=$P(VADM(1),"^"),PSSN=$P($G(VADM(2)),"^",2) | 
|---|
|  | 85 | W !,PNAM," (ID:",$S(PSSN:$P(PSSN,"-",3),1:"0000"),")" | 
|---|
|  | 86 | W ?46,"Patient Phone #: ",$E($P(VAPA(8),"^"),1,16) | 
|---|
|  | 87 | S:'$D(^TMP("PSOCNT",$J,DFN)) PCNT=PCNT+1 S ^TMP("PSOCNT",$J,DFN)="" | 
|---|
|  | 88 | ; | 
|---|
|  | 89 | W !?5,"Non-VA Med: ",OINAM | 
|---|
|  | 90 | W !?2,"Dispense Drug: ",$E(DGNAM,1,37) | 
|---|
|  | 91 | W ?55,"Dosage: ",$E($P(XX,"^",3),1,16) | 
|---|
|  | 92 | W !?7,"Schedule: " S X=$E($P(XX,"^",5),1,30) | 
|---|
|  | 93 | S SCH=$S($L($P(XX,"^",5))>30:$P(X," ",1,$L(X," ")-1),1:X) W SCH | 
|---|
|  | 94 | W ?52,"Med Route: ",$E($P(XX,"^",4),1,35) | 
|---|
|  | 95 | I $E($P(XX,"^",5),$L(SCH)+1,99)'="" D | 
|---|
|  | 96 | . W !?16,$E($P(XX,"^",5),$L(SCH)+1,99) | 
|---|
|  | 97 | W !?9,"Status: ",$S('$P(XX,"^",6):"ACTIVE",1:"DISCONTINUED on "_$$DT($P(XX,"^",7))) | 
|---|
|  | 98 | W ?49,"CPRS Order #: ",$P(XX,"^",8) | 
|---|
|  | 99 | W !?2,"Documented By: ",$E($$GET1^DIQ(200,+$P(XX,"^",11),.01),1,29) | 
|---|
|  | 100 | W ?46,"Documented Date: ",$$DT($P(XX,"^",10)) | 
|---|
|  | 101 | S CLNAM=$$GET1^DIQ(44,+$P(XX,"^",12),.01) | 
|---|
|  | 102 | W !?9,"Clinic: " W:$P(XX,"^",12) $E($P(XX,"^",12)_" - "_CLNAM,1,33) | 
|---|
|  | 103 | W ?51,"Start Date: ",$$DT($P(XX,"^",9)),! | 
|---|
|  | 104 | ; | 
|---|
|  | 105 | ; - Printing "Order Checks" fields | 
|---|
|  | 106 | W:$D(^PS(55,DFN,"NVA",ORD,"OCK")) ! | 
|---|
|  | 107 | F I=0:0 S I=$O(^PS(55,DFN,"NVA",ORD,"OCK",I)) Q:'I  D  Q:$D(DIRUT) | 
|---|
|  | 108 | . S OCK=^PS(55,DFN,"NVA",ORD,"OCK",I,0),STR=$P(OCK,"^"),PRV=+$P(OCK,"^",2) | 
|---|
|  | 109 | . I $Y>(IOSL-5) D HDR Q:$D(DIRUT)  W ! | 
|---|
|  | 110 | . W ?1,"Order Check #",I,": " K TXT D TEXT(.TXT,STR,61) | 
|---|
|  | 111 | . F K=1:1 Q:'$D(TXT(K))  D  Q:$D(DIRUT) | 
|---|
|  | 112 | . . W ?17,TXT(K),! I $Y>(IOSL-4) D HDR Q:$D(DIRUT)  W ! | 
|---|
|  | 113 | . Q:$D(DIRUT)  K TXT | 
|---|
|  | 114 | . F J=0:0 S J=$O(^PS(55,DFN,"NVA",ORD,"OCK",I,"OVR",J)) Q:'J  D | 
|---|
|  | 115 | . . S STR=^PS(55,DFN,"NVA",ORD,"OCK",I,"OVR",J,0) | 
|---|
|  | 116 | . . D TEXT(.TXT,STR,56) | 
|---|
|  | 117 | . W ?6,"Override Reason: " W:'$D(TXT) ! | 
|---|
|  | 118 | . F K=1:1 Q:'$D(TXT(K))  D  Q:$D(DIRUT) | 
|---|
|  | 119 | . . W ?23,TXT(K),! I $Y>(IOSL-4) D HDR Q:$D(DIRUT)  W ! | 
|---|
|  | 120 | . Q:$D(DIRUT) | 
|---|
|  | 121 | . W ?6,"Override Provider: " W:PRV $$GET1^DIQ(200,+PRV,.01) W ! | 
|---|
|  | 122 | Q:$D(DIRUT) | 
|---|
|  | 123 | ; | 
|---|
|  | 124 | ; - Printing "Statement/Explanation/Comments" field | 
|---|
|  | 125 | I $D(^PS(55,DFN,"NVA",ORD,"DSC")) D  Q:$D(DIRUT) | 
|---|
|  | 126 | . W !,"Statement/Explanation/Comments: " K TXT | 
|---|
|  | 127 | . F I=0:0 S I=$O(^PS(55,DFN,"NVA",ORD,"DSC",I)) Q:'I  D | 
|---|
|  | 128 | . . S STR=^PS(55,DFN,"NVA",ORD,"DSC",I,0) | 
|---|
|  | 129 | . . D TEXT(.TXT,STR,47) | 
|---|
|  | 130 | . F K=1:1 Q:'$D(TXT(K))  D  Q:$D(DIRUT) | 
|---|
|  | 131 | . . W ?32,TXT(K),! I $Y>(IOSL-4) D HDR Q:$D(DIRUT)  W ! | 
|---|
|  | 132 | ; | 
|---|
|  | 133 | S PRTD=1,OCNT=OCNT+1 | 
|---|
|  | 134 | Q | 
|---|
|  | 135 | ; | 
|---|
|  | 136 | TEXT(TEXT,STR,L) ; Formats STR into TEXT array, lines lenght = L | 
|---|
|  | 137 | N J,WORD,K S K=+$O(TEXT(""),-1) S:'K K=1 | 
|---|
|  | 138 | F J=1:1:$L(STR," ") D | 
|---|
|  | 139 | . S WORD=$P(STR," ",J) I ($L($G(TEXT(K))_WORD))>L S K=K+1 | 
|---|
|  | 140 | . S TEXT(K)=$G(TEXT(K))_WORD_" " | 
|---|
|  | 141 | Q | 
|---|
|  | 142 | ; | 
|---|
|  | 143 | HDR ; - Prints the Header | 
|---|
|  | 144 | N X,DIR S PAG=$G(PAG)+1 | 
|---|
|  | 145 | I PAG>1,$E(IOST)="C" D  Q:$D(DIRUT) | 
|---|
|  | 146 | . S DIR(0)="E",DIR("A")=" Press ENTER to Continue or ^ to Exit" D ^DIR | 
|---|
|  | 147 | ; | 
|---|
|  | 148 | W @IOF,"Non-VA Meds Usage Report",?74,"Page: ",$J(PAG,3) | 
|---|
|  | 149 | W !,"Sorted by",$$SRT(PSOSRT) | 
|---|
|  | 150 | W !,"Date Range: "_$$DT(PSOSD+1\1)_" - "_$$DT(PSOED\1) | 
|---|
|  | 151 | W ?48,"Run Date: "_$$FMTE^XLFDT($$NOW^XLFDT()) | 
|---|
|  | 152 | S X="",$P(X,"-",80)="" W !,X | 
|---|
|  | 153 | Q | 
|---|
|  | 154 | ; | 
|---|
|  | 155 | SRT(ST) ; - Convert the "1,2,4" (example) to "PATIENT,ORDERABLE ITEM,STATUS" | 
|---|
|  | 156 | ;Input: ST-String with the Sorting fields by number | 
|---|
|  | 157 | ;Output: ST-String with the Sorting fields by name | 
|---|
|  | 158 | N I,X,STR,FLD | 
|---|
|  | 159 | S STR="PATIENT NAME^ORDERABLE ITEM^DATE DOCUMENTED^STATUS^ORDER CHECKS" | 
|---|
|  | 160 | F I=1:1:$L(ST,",") D | 
|---|
|  | 161 | . S FLD=+$P(ST,",",I),X=$P(STR,"^",FLD) | 
|---|
|  | 162 | . S $P(ST,",",I)=" "_X | 
|---|
|  | 163 | Q ST | 
|---|
|  | 164 | ; | 
|---|
|  | 165 | DT(DT) ; - Convert FM Date to MM/DD/YYYY | 
|---|
|  | 166 | I 'DT Q "" | 
|---|
|  | 167 | I '(DT#10000) Q (1700+$E(DT,1,3)) | 
|---|
|  | 168 | I '(DT#100) Q $E(DT,4,5)_"/"_(1700+$E(DT,1,3)) | 
|---|
|  | 169 | Q $E(DT,4,5)_"/"_$E(DT,6,7)_"/"_(1700+$E(DT,1,3)) | 
|---|