Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: PSJPADPT

PSJPADPT.m

Go to the documentation of this file.
  1. PSJPADPT ;BIR/JCH - PADE Activity Utility ;09/22/11 5:00pm
  1. ;;5.0;INPATIENT MEDICATIONS;**317**;16 DEC 97;Build 130
  1. ;
  1. ; References to ^PSSDSAPM is supported by DBIA 5570.
  1. ; Reference to FULL^VALM1 is supported by DBIA 10116.
  1. ; Reference to $$FMTE^XLFDT is supported by DBIA 10103.
  1. ; Reference to ^PSDRUG is supported by DBIA 2192.
  1. ;
  1. PADECK ;
  1. N PSJTCNT,PSJTSCR
  1. K VALMBCK
  1. S PSJPADPT=1,PSJTSCR=15
  1. D FULL^VALM1
  1. I '$$ACTIVITY(DFN,PSJTSCR) D
  1. .W !!,"No PADE activity on file",!
  1. .K DIR S DIR(0)="EAO",DIR("A")="Press Return to Continue..." D ^DIR K DIR W @IOF
  1. .W @IOF
  1. PADEND S VALMBCK="R"
  1. K PSJPADPT
  1. Q
  1. ;
  1. ACTIVITY(DFN,PSJTSCR) ; Get PADE activity for patient DFN, display to screen length PSJTSCR
  1. N PSPDT,PSPDRG,PSTRANS,PSJPOP,PSJCONT,PSJPAGE,PSJPGTMP
  1. K DIR W @IOF
  1. S (PSJTCNT,PSJPOP,PSJPAGE)=0
  1. S PSPDT=99999999 F S PSPDT=$O(^PS(58.6,"P",+$G(DFN),PSPDT),-1) Q:'PSPDT!PSJPOP D
  1. .S PSPDRG="" F S PSPDRG=$O(^PS(58.6,"P",+$G(DFN),PSPDT,PSPDRG)) Q:(PSPDRG="")!PSJPOP D
  1. ..S PSTRANS=0 F S PSTRANS=$O(^PS(58.6,"P",+$G(DFN),PSPDT,PSPDRG,PSTRANS)) Q:'PSTRANS!PSJPOP D
  1. ...S PSJCONT=$G(PSJCONT)+1
  1. ...I 'PSJTCNT D PGHEAD
  1. ...N PSEXDT,PSEXTM,PSEXDRG,PSJCAB,PSJQTY,PSJSTS,PSJORD,ND0,ND1,ND2,PSEXDRG2,PSJOVOK,PSJQAR
  1. ...S ND0=$G(^PS(58.6,PSTRANS,0)),ND1=$G(^PS(58.6,PSTRANS,1))
  1. ...S PSEXDT=$$PSEXDT(PSPDT)
  1. ...S PSEXDRG=$S($G(PSPDRG):$P($G(^PSDRUG(+PSPDRG,0)),"^"),1:$P(PSPDRG,"zz",2))
  1. ...I PSPDRG="zz~UNKNOWN" S PSEXDRG2=$P(ND1,"^",6) I PSEXDRG2]"" S PSEXDRG=PSEXDRG2
  1. ...S:$L(PSEXDRG)>36 PSEXDRG=$E(PSEXDRG,1,36)_"_"
  1. ...S PSJORD=$P(ND1,"^")
  1. ...S PSJQTY=$P(ND0,"^",4) I PSJQTY["." N PSJDEC S PSJDEC="."_$E($P(PSJQTY,".",2),1,2) D
  1. ....I 'PSJDEC!(PSJDEC=".") S PSJQTY=$P(PSJQTY,".") Q ; insignificant trailing zeroes
  1. ....S PSJQTY=$P(PSJQTY,".")_+PSJDEC
  1. ...S PSJCAB=$P(ND0,"^",2)
  1. ...S PSJSTS=$P(ND0,"^",5)
  1. ...S PSJQAR(5)=PSJSTS,PSJQAR(6)=PSJQTY N PSJSIGN S PSJSIGN=$$TSIGN^PSJPADIT(.PSJQAR) S:PSJQTY["-" PSJQTY=$P(PSJQTY,"-",2) S PSJQTY=PSJSIGN_PSJQTY
  1. ...S PSJOVOK=$S(PSJSTS="V":1,PSJSTS="R":1,PSJSTS="W":1,1:0)
  1. ...S PSJSTS=$S(PSJSTS="V":"DISP",PSJSTS="R":"RTN",PSJSTS="W":"WASTE",PSJSTS="D":"DESTK",PSJSTS="L":"LOAD",PSJSTS="U":"UNLD",PSJSTS="F":"FILL",PSJSTS="N":"CANCL",PSJSTS="C":"COUNT",PSJSTS="E":"EXP",PSJSTS="A":"DISCR",1:PSJSTS)
  1. ...S:$E(PSJSTS)="W" PSJQTY="NA"
  1. ...W !,PSEXDT S PSJTCNT=$G(PSJTCNT)+1
  1. ...W ?15,$S(PSJORD:"N",'PSJOVOK:"",1:"Y"),?18,$E(PSEXDRG,1,39),?56,$E(PSJSTS,1,6),?62,$J(PSJQTY,3),?69,PSJCAB
  1. ...S ND2=$P($G(^PS(58.6,PSTRANS,2)),"^") I ND2]"" W !," Comment: ",$E(ND2,1,66) S PSJTCNT=$G(PSJTCNT)+1
  1. ...I (PSJTCNT\PSJTSCR)>PSJPAGE D CONTINUE(.PSJPAGE)
  1. ...S PSJPGTMP=PSJPAGE
  1. I $G(PSJCONT) D CONTINUE(.PSJPAGE)
  1. K DIR W @IOF
  1. Q PSJTCNT
  1. ;
  1. PGHEAD ; Print Page Header
  1. W !,"Pharmacy Automated Dispensing Equipment (PADE) Activity Log"
  1. D COHEAD
  1. Q
  1. ;
  1. COHEAD ; Print Column Header
  1. W @IOF
  1. W !!,"Date/Time",?14,"O-R",?18,"Item",?55,"Status",?63,"Qty",?69,"PADE ID"
  1. W !,"================================================================================"
  1. Q
  1. ;
  1. CONTINUE(PSJPAGE) ; Press return to continue
  1. N X,DIR
  1. S DIR("A",1)=" "
  1. S DIR(0)="EAO",DIR("A")="Press Return to Continue..." D ^DIR S:$G(X)="^" PSJPOP=1
  1. K DIR
  1. D COHEAD
  1. S PSJPAGE=$G(PSJPAGE)+1
  1. K PSJCONT
  1. Q
  1. ;
  1. PSEXDT(DT) ; Format Date for display
  1. N XDT,XTM,I
  1. S XDT=$P($TR($$FMTE^XLFDT(DT,2),"@"," "),":",1,2)
  1. S XTM=$P(XDT," ",2)
  1. F I=1:1:3 S $P(XDT,"/",I)=$TR($J(+$P(XDT,"/",I),2)," ",0)
  1. S XDT=XDT_" "_XTM
  1. Q XDT
  1. ;
  1. ASKRESET(PADE) ; Prompt to reset PADE device balances
  1. N DIR,X,Y
  1. S DIR(0)="Y",DIR("A")="RESET/INITIALIZE PADE DEVICE"
  1. S DIR("?")="^D RESHLP^PSJPADPT"
  1. S DIR("B")="N" D ^DIR
  1. I 'Y D MANUN^PSJPAD70(PADE) Q
  1. Q:'$$SURES()
  1. D CONTRES(PADE)
  1. Q
  1. ;
  1. SURES() ; Ask user if they're really sure about deleting all meds from device
  1. N DIR,X,Y
  1. S DIR(0)="Y"
  1. S DIR("A",1)=" "
  1. S DIR("A",2)=" CAUTION: THIS WILL DELETE THE LIST OF MEDICATIONS"
  1. S DIR("A",3)=" LINKED TO THIS PADE CABINET (in VistA only)."
  1. S DIR("A",4)=" "
  1. S DIR("A")="Are you sure you want to do this",DIR("B")="N"
  1. S DIR("?")="^D RESHLP^PSJPADPT"
  1. D ^DIR
  1. Q Y
  1. ;
  1. CONTRES(PADE) ; Finish device reset
  1. N FDA,PSPADER
  1. I '$$RESPADE(PADE) W " ...Unable to reset "_$G(PADE) Q
  1. S FDA(58.639,"?+1,"_+PADE_",",.01)=$$NOW^XLFDT()
  1. D UPDATE^DIE("","FDA","PSPADER")
  1. I $G(PSPADER(1,0))="+" W " ...PADE initialization complete."
  1. Q
  1. ;
  1. RESPADE(PADE) ; Reset balances in PADE cabinet to zero
  1. N DRUG,DRAWER,POCKET,SUBPCK,PSJPSYS,DIK,DA,PADIEN,PADENAM,PSPADER,PSJY
  1. D GETS^DIQ(58.63,PADE_",",1,"I","PSJPSYS")
  1. S PSJPSYS=$G(PSJPSYS("58.63",+PADE_",",1,"I"))
  1. Q:'$G(PSJPSYS)!'$D(^PS(58.601,+$G(PSJPSYS),0)) 0
  1. S PADENAM=$P($G(^PS(58.63,+PADE,0)),"^")
  1. S PADIEN=$$FIND1^DIC(58.6011,","_PSJPSYS_",","MX",PADENAM,,,"PSPADER")
  1. Q:'$G(PADIEN)!'$G(^PS(58.601,+PSJPSYS,"DEVICE",+PADIEN,0)) 0
  1. S DIK="^PS(58.601,"_+PSJPSYS_",""DEVICE"","_+PADIEN_",""DRAWER"","
  1. S DA(2)=+PSJPSYS,DA(1)=+PADIEN
  1. S DRAWER=0 F S DRAWER=$O(^PS(58.601,+PSJPSYS,"DEVICE",+PADIEN,"DRAWER",DRAWER)) Q:'DRAWER D
  1. .S DA=DRAWER D ^DIK
  1. S DIK="^PS(58.601,"_+PSJPSYS_",""DEVICE"","_+PADIEN_",""DRUG"","
  1. S DA(2)=+PSJPSYS,DA(1)=+PADIEN
  1. S DRUG=0 F S DRUG=$O(^PS(58.601,+PSJPSYS,"DEVICE",+PADIEN,"DRUG",DRUG)) Q:'DRUG D
  1. .S DA=DRUG D ^DIK
  1. Q 1
  1. ;
  1. EMPTY(PADE) ; Return 1 if PADE cabinet contains no drugs
  1. ; INPUT : PADE - Pointer to PADE DISPENSING DEVICE (#58.63) FILE
  1. N EMPTY
  1. S EMPTY=0
  1. I '$D(^PS(58.601,"DEV",+PADE)) S EMPTY=1
  1. Q EMPTY
  1. ;
  1. RESHLP ; Display help text explaining PADE reset
  1. N HELPAR
  1. S HELPAR(1)="This action deletes all medications from this PADE cabinet in VistA,"
  1. S HELPAR(2)="making the cabinet appear empty to VistA users. This does not affect"
  1. S HELPAR(3)="the vendor system. Resetting a cabinet makes the device unavailable"
  1. S HELPAR(4)="to the PADE INVENTORY REPORT as it will no longer have inventory."
  1. S HELPAR(5)="After a PADE cabinet is reset, medications will be added babck to the"
  1. S HELPAR(6)="cabinet as new HL7 messages are received from the vendor, and the"
  1. S HELPAR(7)="cabinet will be available again for reports and order entry lookups."
  1. D EN^DDIOL(.HELPAR)
  1. Q
  1. ;
  1. PARTIAL(PSJY,INARRAY,OUTARRAY,DISPDATA,MSG,ARRAYX,FOUND,NOXREF,PSALLPC) ; Lookup PSJY in INARRAY
  1. ; INPUT - PSJY=Lookup text
  1. ; - INARRAY(text)=number - Array of selectable data
  1. ; OUTPUT - OUTARRAY(text)=number - Entry selected from INARRAY
  1. ;
  1. N PSJPART,ITMNAME,II,ITM,ITMX,Y,PSJTMP,PSJDUP
  1. K FOUND
  1. S II=1,ITMID="" F S ITMID=$O(INARRAY(ITMID)) Q:ITMID="" D
  1. .Q:ITMID="IEN"!(ITMID="NAME")
  1. .S ITM(ITMID)=$P(INARRAY(ITMID),"^"),ITMX(INARRAY(ITMID),ITMID)=$P(INARRAY(ITMID),"^",2)
  1. ;
  1. Q:$D(ITM)<10
  1. F ITM="" F S ITM=$O(ITM(ITM)) Q:ITM="" D
  1. .S PSJDUP=0
  1. .I $E(ITM,1,$L(PSJY))=PSJY D Q:'$G(PSJDUP)
  1. ..N PP,QQ S PP="" F S PP=$O(PSJPART(PP)) Q:PP="" S QQ="" F S QQ=$O(PSJPART(PP,QQ)) Q:QQ="" I PSJPART(PP,QQ)=ITM(ITM) S PSJDUP=1
  1. ..Q:$G(PSJDUP)
  1. ..S PSJPART(II,ITM)=INARRAY(ITM)
  1. ..S PSJPART(II,ITM)=PSJPART(II,ITM)_"^"_$P($G(ARRAYX(ITM(ITM))),"^",2)
  1. ..S II=II+1
  1. .I '$G(NOXREF) I $E(ITM(ITM),1,$L(PSJY))=PSJY D Q:'$G(PSJDUP)
  1. ..N PP,QQ S PP="" F S PP=$O(PSJPART(PP)) Q:PP="" S QQ="" F S QQ=$O(PSJPART(PP,QQ)) Q:QQ="" I PSJPART(PP,QQ)=ITM(ITM) S PSJDUP=1
  1. ..Q:$G(PSJDUP)
  1. ..S PSJPART(II,ITM)=ITM(ITM)
  1. ..S PSJPART(II,ITM)=PSJPART(II,ITM)_"^"_$P($G(ARRAYX(ITM(ITM))),"^",2)
  1. ..S II=II+1
  1. .I $$UPPER^HLFNC($E(ITM,1,$L(PSJY)))=$$UPPER^HLFNC(PSJY) D Q:'$G(PSJDUP)
  1. ..N PP,QQ S PP="" F S PP=$O(PSJPART(PP)) Q:PP="" S QQ="" F S QQ=$O(PSJPART(PP,QQ)) Q:QQ="" I PSJPART(PP,QQ)=ITM(ITM) S PSJDUP=1
  1. ..Q:$G(PSJDUP)
  1. ..S PSJPART(II,ITM)=INARRAY(ITM)_"^"_$P($G(ARRAYX(ITM(ITM))),"^",2)
  1. ..S II=II+1
  1. .I '$G(NOXREF) I $$UPPER^HLFNC($E(ITM(ITM),1,$L(PSJY)))=$$UPPER^HLFNC(PSJY) D Q:'$G(PSJDUP)
  1. ..N PP,QQ S PP="" F S PP=$O(PSJPART(PP)) Q:PP="" S QQ="" F S QQ=$O(PSJPART(PP,QQ)) Q:QQ="" I PSJPART(PP,QQ)=ITM(ITM) S PSJDUP=1
  1. ..Q:$G(PSJDUP)
  1. ..S PSJPART(II,ITM)=ITM(ITM)_"^"_$P($G(ARRAYX(ITM(ITM))),"^",2)
  1. ..S II=II+1
  1. I $D(PSJPART(1)) D
  1. .N DIR,STRING,CNT
  1. .I '$O(PSJPART(1)) S PSJTMP=$O(PSJPART(1,"")) D Q
  1. ..S OUTARRAY(PSJTMP)=$S('$G(PSALLPC):$P(PSJPART(1,PSJTMP),"^"),1:PSJPART(1,PSJTMP)),FOUND=1
  1. ..W !," "_$O(PSJPART(1,"")),?15,$P(PSJPART(1,PSJTMP),"^")
  1. .I $L($G(MSG)) W !,MSG,!
  1. .S CNT=0 F S CNT=$O(PSJPART(CNT)) Q:'CNT D
  1. ..N ITMID S ITMID=$O(PSJPART(CNT,""))
  1. ..S STRING=$G(STRING)_CNT_":"_ITMID_";"
  1. ..S DIR("A",CNT)=" "_CNT_" "_ITMID_$S($G(DISPDATA):" "_$P($G(PSJPART(CNT,ITMID)),"^"),1:"")
  1. .S DIR("A")="Choose 1-"_+$O(PSJPART(9999999),-1)_": "
  1. .S DIR(0)="SAO^"_STRING D ^DIR
  1. .I Y>0 D Q
  1. ..N PSPTSEL S PSPTSEL=$O(PSJPART(+Y,""))
  1. ..S OUTARRAY(PSPTSEL)=$S('$G(PSALLPC):$P(PSJPART(+Y,PSPTSEL),"^"),1:$G(PSJPART(+Y,PSPTSEL))),FOUND=1
  1. ..N ID2 S ID2=$G(OUTARRAY(PSPTSEL)) I ID2]"" W " ",$P(ID2,"^")
  1. .S PSJY=""
  1. Q