| 1 | PSBMLEN1 ;BIRMINGHAM/EFC-BCMA MEDICATION LOG FUNCTIONS ;Mar 2004 | 
|---|
| 2 | ;;3.0;BAR CODE MED ADMIN;**3,4,9,11,13**;Mar 2004 | 
|---|
| 3 | ; | 
|---|
| 4 | ; Reference/IA | 
|---|
| 5 | ; ENE^PSJBCMA4/3416 | 
|---|
| 6 | ; ^XUSEC/10076 | 
|---|
| 7 | ; HLP^DDSUTL/10150 | 
|---|
| 8 | ; | 
|---|
| 9 | NEW(Y) ; Create the new entry | 
|---|
| 10 | N PSBREC,PSB,PSBADST,PSBFREQ | 
|---|
| 11 | S PSBMMEN=1 | 
|---|
| 12 | W @IOF D CLEAN^PSBVT,PSJ1^PSBVT(DFN,Y) | 
|---|
| 13 | D NOW^%DTC | 
|---|
| 14 | I PSBOSP<% D  Q:%'=1 | 
|---|
| 15 | .W @IOF,$C(7) | 
|---|
| 16 | .W !,"NOTICE: This order is NOT currently active." | 
|---|
| 17 | .W !,"        Are You Sure You Want To Continue" | 
|---|
| 18 | .S %=2 D YN^DICN | 
|---|
| 19 | I PSBADST="" S PSBFREQ=$$GETFREQ^PSBVDLU1(DFN,PSBONX),PSBADST=$$GETADMIN^PSBVDLU1(DFN,PSBONX,PSBOST,PSBFREQ,PSBDT) | 
|---|
| 20 | E  K ^TMP("PSB",$J,"GETADMIN") S ^TMP("PSB",$J,"GETADMIN",0)=PSBADST | 
|---|
| 21 | S PSBODSCH=0 I (PSBFREQ#1440'=0),(1440#PSBFREQ'=0) S PSBODSCH=1 | 
|---|
| 22 | W !,"Order:       ",PSBONX | 
|---|
| 23 | W !,"Medication:  ",PSBOITX | 
|---|
| 24 | W !,"Dosage:      ",PSBDOSE | 
|---|
| 25 | W !,"Schedule:    ",PSBSCH | 
|---|
| 26 | W !,"Admin Times: ",$S(PSBODSCH:"(Odd Sched.)",1:PSBADST) | 
|---|
| 27 | I $D(^XUSEC("PSB READ ONLY",DUZ)) D  Q | 
|---|
| 28 | .W !!,"Medications CANNOT be administered while in PSB READ ONLY mode.",!! R "Press ENTER KEY to continue. ",PSBCNTNU:5 | 
|---|
| 29 | W !!,"Is this the correct Order" S %=1 D YN^DICN Q:%'=1 | 
|---|
| 30 | ; | 
|---|
| 31 | ; PRN, One-Time, On Call orders | 
|---|
| 32 | ; | 
|---|
| 33 | I PSBSCHT'="C" D | 
|---|
| 34 | .D VAL^PSBMLVAL(.PSB,DFN,+PSBONX,$E(PSBONX,$L(PSBONX))) | 
|---|
| 35 | .I PSBSCHT="P",($D(PSB(1))) W !!,"Brief Administration History:  ",! S X=$O(PSB(" "),-1),X=$S(X>4:4,1:X) F I=1:1:X W !,?5,PSB(I) | 
|---|
| 36 | .I $D(^XUSEC("PSB READ ONLY",DUZ)) W !,"This operation is NOT AVAILABLE in PSB READ ONLY mode.",! Q | 
|---|
| 37 | .I ($D(^XUSEC("PSB STUDENT",DUZ))),('$D(^XUSEC("PSB INSTRUCTOR"))) W !,"This operation is NOT AVAILABLE in PSB READ ONLY mode.",! Q | 
|---|
| 38 | .W !!,"Create an administration for this order" S %=1 D YN^DICN Q:%'=1 | 
|---|
| 39 | .I PSBSCHT="P" D  Q:Y=""!(Y["^") | 
|---|
| 40 | ..K DIR S DIR(0)="FB^1:30",DIR("A")="PRN Reason (1-30 characters)" | 
|---|
| 41 | ..W !!,"NOTICE: PRN Reason is Required for ALL PRN Entries",! | 
|---|
| 42 | ..D ^DIR | 
|---|
| 43 | ..I Y=""!(Y["^") W !!,"Sorry, Reason is required, No Entry Made!" Q | 
|---|
| 44 | ..S PSBREC(6)=$P(Y,"|") | 
|---|
| 45 | .; Build the form of dosage to CAP or TAB or null | 
|---|
| 46 | .S:(PSBDOSEF'?1"CAP".E)&(PSBDOSEF'?1"TAB".E)&(PSBDOSEF'?1"PATCH".E) PSBDOSEF="" | 
|---|
| 47 | .; Build the variable dose check #####-#####MG | 
|---|
| 48 | .S PSBVARD=$S(PSBDOSE?1.5N1"-"1.5N.E:1,1:0) | 
|---|
| 49 | .S PSBREC(0)=DFN | 
|---|
| 50 | .S PSBREC(1)=PSBONX | 
|---|
| 51 | .S PSBREC(2)=PSBSCHT | 
|---|
| 52 | .S PSBREC(3)="G" | 
|---|
| 53 | .S PSBREC(4)=PSBOIT | 
|---|
| 54 | .S PSBREC(5)="" | 
|---|
| 55 | .S PSBREC(7)="Entry created with 'Manual Medication Entry' option." | 
|---|
| 56 | .S PSBREC(8)="" | 
|---|
| 57 | .S PSBREC(9)=$S(PSBONX["U":"UDTAB",1:"PBTAB") | 
|---|
| 58 | .S PSBINDX=10 | 
|---|
| 59 | .S X="" F  S X=$O(PSBDDA(X)) Q:X=""  S PSBREC(PSBINDX)=$P(PSBDDA(X),U,1,2)_U_$P(PSBDDA(X),U,4)_U_$P(PSBDDA(X),U,4)_U_PSBDOSEF,PSBINDX=PSBINDX+1 | 
|---|
| 60 | .S X="" F  S X=$O(PSBADA(X)) Q:X=""  S PSBREC(PSBINDX)=PSBADA(X),PSBINDX=PSBINDX+1 | 
|---|
| 61 | .S X="" F  S X=$O(PSBSOLA(X)) Q:X=""  S PSBREC(PSBINDX)=PSBSOLA(X),PSBINDX=PSBINDX+1 | 
|---|
| 62 | .D FILE | 
|---|
| 63 | .I $G(DA),PSBREC(2)="O",$D(^PSB(53.79,DA)) I $P(^PSB(53.79,DA,0),U,9)="G" D ENE^PSJBCMA4(PSBREC(0),PSBREC(1)) | 
|---|
| 64 | ; | 
|---|
| 65 | ; Continuous Meds | 
|---|
| 66 | ; | 
|---|
| 67 | I PSBSCHT="C" D | 
|---|
| 68 | .W ! S %DT="AEQ",%DT("A")="Enter the DATE the medication was administered: " | 
|---|
| 69 | .D NOW^%DTC S %DT(0)=(-1)*X,%DT("B")="" D ^%DT K %DT(0) Q:Y<1  S PSBDTX=Y D D^DIQ | 
|---|
| 70 | .S:PSBODSCH PSBSCTMX=$$GETADMIN^PSBVDLU1(DFN,PSBONX,PSBOST,PSBFREQ,PSBDTX) | 
|---|
| 71 | .F PSBXX=0:1 Q:$G(^TMP("PSB",$J,"GETADMIN",PSBXX))=""  D | 
|---|
| 72 | ..S X="",Y=$G(^TMP("PSB",$J,"GETADMIN",PSBXX)) | 
|---|
| 73 | ..F Z=1:1:$L(Y,"-") S X=X_$S(X]"":";",1:"")_Z_":"_$P(Y,"-",Z) | 
|---|
| 74 | .I PSBODSCH,PSBSCTMX="" D  Q | 
|---|
| 75 | ..W !!,"Order "_PSBONX_" is NOT SCHEDULED for administration on that entered date." | 
|---|
| 76 | ..K DIR S DIR(0)="E^" D ^DIR | 
|---|
| 77 | .K DIR S DIR(0)="S^"_X,DIR("A")="Select Administration Time" | 
|---|
| 78 | .D ^DIR Q:Y<1 | 
|---|
| 79 | .S PSBDTX=+(PSBDTX_"."_Y(0)) | 
|---|
| 80 | .S Y=PSBDTX D D^DIQ | 
|---|
| 81 | .W !!,"Create an administration for ",Y S %=1 D YN^DICN  Q:%'=1 | 
|---|
| 82 | FORUM .; Build the form of dosage to CAP or TAB or null | 
|---|
| 83 | .S PSBDOSEF=PSBDOSEF | 
|---|
| 84 | .S:(PSBDOSEF'?1"CAP".E)&(PSBDOSEF'?1"TAB".E)&(PSBDOSEF'?1"PATCH".E) PSBDOSEF="" | 
|---|
| 85 | .; Build the variable dose check #####-#####MG | 
|---|
| 86 | .S PSBVARD=$S(PSBDOSE?1.5N1"-"1.5N.E:1,1:0) | 
|---|
| 87 | .S PSBREC(0)=DFN | 
|---|
| 88 | .S PSBREC(1)=PSBONX | 
|---|
| 89 | .S PSBREC(2)=PSBSCHT | 
|---|
| 90 | .S PSBREC(3)="G" | 
|---|
| 91 | .S PSBREC(4)=PSBOIT | 
|---|
| 92 | .S PSBREC(5)=PSBDTX | 
|---|
| 93 | .S PSBREC(6)="" | 
|---|
| 94 | .S PSBREC(7)="Entry created with 'Manual Medication Entry' option." | 
|---|
| 95 | .S PSBREC(8)="" | 
|---|
| 96 | .S PSBREC(9)=$S(PSBONX["U":"UDTAB",1:"PBTAB") | 
|---|
| 97 | .S PSBINDX=10 | 
|---|
| 98 | .S X="" F  S X=$O(PSBDDA(X)) Q:X=""  S PSBREC(PSBINDX)=$P(PSBDDA(X),U,1,2)_U_$P(PSBDDA(X),U,4)_U_$P(PSBDDA(X),U,4)_U_PSBDOSEF,PSBINDX=PSBINDX+1 | 
|---|
| 99 | .S X="" F  S X=$O(PSBADA(X)) Q:X=""  S PSBREC(PSBINDX)=PSBADA(X),PSBINDX=PSBINDX+1 | 
|---|
| 100 | .S X="" F  S X=$O(PSBSOLA(X)) Q:X=""  S PSBREC(PSBINDX)=PSBSOLA(X),PSBINDX=PSBINDX+1 | 
|---|
| 101 | .D FILE | 
|---|
| 102 | Q | 
|---|
| 103 | ; | 
|---|
| 104 | FILE ; Call the med log RPC to file it and DDS to edit it | 
|---|
| 105 | N PSB,PSBSAVE,PSBAUDIT | 
|---|
| 106 | D RPC^PSBML(.PSB,"+1^MEDPASS",.PSBREC) | 
|---|
| 107 | I '$D(PSB) S PSB(0)=1,PSB(1)="-1^INCOMPLETE ENTRY^"_PSBINCX | 
|---|
| 108 | I +PSB(1)<1 D  Q | 
|---|
| 109 | .W @IOF,!,"Error(s) Creating Med Log Entry",! | 
|---|
| 110 | .S X=$S(PSB(0)=1:0,1:1) F  S X=$O(PSB(X)) Q:X=""  W !,$J($S(X=1:X,1:X-1),2),". ",$S(X=1:$P(PSB(X),"^",2),1:PSB(X)) | 
|---|
| 111 | .W !!,"No Med Log Entry Created.",!! | 
|---|
| 112 | .K DIR S DIR(0)="E" D ^DIR | 
|---|
| 113 | S PSBSAVE=0 S:'$G(PSBMMEN) PSBAUDIT=1 | 
|---|
| 114 | S DA=$P(PSB(1),U,3),DDSFILE=53.79,DDSPARM="C" | 
|---|
| 115 | I $P(^PSB(53.79,DA,.1),U,1)?.N1"U" S DR="[PSB NEW UD ENTRY]" | 
|---|
| 116 | I $P(^PSB(53.79,DA,.1),U,1)?.N1"V" S DR="[PSB NEW IV ENTRY]" | 
|---|
| 117 | D ^DDS | 
|---|
| 118 | L +^PSB(53.79,DA):1 I  L -^PSB(53.79,DA) I PSBSAVE'=1 D | 
|---|
| 119 | .W !,"Incomplete Med Log Entry, Deleting...#",DA S A=^PSB(53.79,DA,0),DFN=$P(A,U,1),AADT=$P(A,U,6) | 
|---|
| 120 | .K ^PSB(53.79,"AADT",DFN,AADT,DA) S DIK="^PSB(53.79," D ^DIK | 
|---|
| 121 | I PSBSAVE=1 D | 
|---|
| 122 | .I $D(DA) D:($P(^PSB(53.79,DA,0),U,9)="G") | 
|---|
| 123 | ..I $D(^PSB(53.79,DA,.5)) S PSBY=0 F  S PSBY=$O(^PSB(53.79,DA,.5,PSBY)) Q:+PSBY<1  D | 
|---|
| 124 | ...I $P(^PSB(53.79,DA,.5,PSBY,0),U,4)="PATCH" D | 
|---|
| 125 | ....S (PSBYX,PSBXUIT)="" F  S PSBYX=$O(^PSB(53.79,"AORDX",PSBDFN,PSBONX,PSBYX),-1)   Q:PSBYX=""  D  Q:PSBXUIT | 
|---|
| 126 | .....S PSBYZ="" S PSBYZ=$O(^PSB(53.79,"AORDX",PSBDFN,PSBONX,PSBYX,PSBYZ)) I (PSBYZ'=DA),$P(^PSB(53.79,PSBYZ,0),U,9)="G" D | 
|---|
| 127 | ......W !!,"PATCH has been GIVEN before this admin completed; Deleting Med Log Entry...#",DA,!! S A=^PSB(53.79,DA,0),DFN=$P(A,U,1),AADT=$P(A,U,6) | 
|---|
| 128 | ......K ^PSB(53.79,"AADT",DFN,AADT,DA) S DIK="^PSB(53.79," D ^DIK | 
|---|
| 129 | ......S PSBXUIT=1 | 
|---|
| 130 | ....Q:PSBXUIT | 
|---|
| 131 | ....S ^PSB(53.79,"APATCH",$P(^PSB(53.79,DA,0),U),$P(^PSB(53.79,DA,0),U,6),DA)="" | 
|---|
| 132 | .Q:(PSBIEN="+1")&('$D(PSBIEN(1))) | 
|---|
| 133 | .Q:$G(PSBXUIT) | 
|---|
| 134 | .S X=$S($P(PSBIEN,",",2)]"":$P(PSBIEN,",",2),PSBIEN="+1":PSBIEN(1),1:"") | 
|---|
| 135 | .I X]"" I ($F("HR",$P(^PSB(53.79,X,0),U,9))>1) F Y=.5,.6,.7 S Z=0 F  S Z=$O(^PSB(53.79,X,Y,Z)) Q:+Z=0  S $P(^PSB(53.79,X,Y,Z,0),U,3)=0 | 
|---|
| 136 | Q | 
|---|
| 137 | ; | 
|---|
| 138 | FDATE ;Check Admin Time for future date/time. | 
|---|
| 139 | N PSBTIMX | 
|---|
| 140 | S PSBTIMX=X D NOW^%DTC | 
|---|
| 141 | I PSBTIMX>% W $C(7) S (DDSERROR,DDSBR)=1 D HLP^DDSUTL("Future date/time is not allowed") | 
|---|
| 142 | Q | 
|---|
| 143 | ; | 
|---|