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

PSJPDRUT.m

Go to the documentation of this file.
  1. PSJPDRUT ;BIR/MV-PADE REPORT UTILITIES ; 3/22/18 9:36am
  1. ;;5.0;INPATIENT MEDICATIONS;**317,365**;16 DEC 97;Build 2
  1. ;
  1. ; Reference to ^%DT is supported by DBIA 10003.
  1. ; Reference to CLEAR^VALM1 is supported by DBIA 10116.
  1. ; Reference to ^XLFDT is supported by DBIA 10103.
  1. ; Reference to ^DPT supported by DBIA 10035
  1. ; Reference to ^PSDRUG supported by DBIA 2192
  1. Q
  1. ;
  1. DATE(BEGEND,PSJSTOP,PSJINP) ; Prompt for Start Date
  1. N DIR,X,Y,DATE,PSJNOW,PSJDONE,TMPY,DUOUT,DTOUT
  1. S PSJNOW=$$NOW^XLFDT
  1. K %DT S %DT("A")="Enter"_$S($G(BEGEND)="B":" Start ",$G(BEGEND)="E":" End ",1:" ")_"Date: ",%DT="TAE"
  1. F Q:$G(PSJSTOP)!$G(PSJDONE) D
  1. .D ^%DT S TMPY=Y I ($D(DTOUT))!$G(DUOUT) S PSJSTOP=1 Q
  1. .I ($G(BEGEND)="E"),($G(X)="T") S TMPY=$P(TMPY,".")_".24"
  1. .I $G(TMPY)<1 D Q
  1. ..I $E(X)="^" S PSJSTOP=1 Q
  1. ..W !,?3,$S(BEGEND="B":"Start ",1:"End ")_"Date is required"
  1. .I $G(BEGEND)="B" I TMPY>($$FMADD^XLFDT(PSJNOW)) D Q
  1. ..W $C(7),!?3,"Start Date cannot be in the future. Re-enter Start Date."
  1. .I $G(BEGEND)="E",$G(PSJINP("PSJBDT")) I TMPY<PSJINP("PSJBDT") D Q
  1. ..W $C(7),!?3,"End Date cannot be before Start Date. Re-enter End Date."
  1. .S PSJDONE=1
  1. S:$G(PSJSTOP) TMPY=""
  1. S DATE=TMPY
  1. I $G(BEGEND)="E",($P(DATE,".",2)="") S DATE=$$FMADD^XLFDT($P(DATE,"."),1)
  1. Q DATE
  1. ;
  1. SELUSER(PSJINP,USER,SELUSER,USERX,PSJSTOP) ; Prompt for one user (or ALL)
  1. N DIR,X,Y,USRNAME,DUOUT,DTOUT,PSFOUND,PSALLPC
  1. N PSJPART,II,PSELMSG,PLSTMSG
  1. W ! D EN^DDIOL(" Enter '^ALL' to select all Users associated with selected PADE transactions.") W !
  1. S PLSTMSG(1)="Transactions matching the entered Date Range and Division "
  1. S PLSTMSG(2)="exist for the Users listed below."
  1. S DIR(0)="FAO^1:30",DIR("?")="^D LIST^PSJPDRTR(.USER,.PLSTMSG,15)"
  1. S DIR("A")="Select User: "_$S($D(SELUSER)>1:"",1:"^ALL//")
  1. D ^DIR I X="" S Y=$S($D(SELUSER)<10:"ALL",1:"")
  1. I $E(X)="^" S Y=$$XALL^PSJPDRIP(X)
  1. I $G(DUOUT)!$G(DTOUT) S PSJSTOP=1 Q
  1. I Y="ALL" M SELUSER=USER S SELUSER="ALL",PSJDONE=1 Q
  1. I Y="" D Q
  1. .I $D(SELUSER)>1 S PSJDONE=1 Q
  1. .W !!?2,"Select a single User, several Items or enter ^ALL to select all Items."
  1. S PSJY=Y
  1. I $D(USER(PSJY)) D Q
  1. .W " ",USER(PSJY) S SELUSER(PSJY)=""
  1. I $D(USERX(PSJY)) D Q
  1. .W " ",USERX(PSJY) S SELUSER(USERX(PSJY))=""
  1. S PSELMSG="Select a User"
  1. S PSALLPC=1 ; return all data pieces from partial lookup
  1. D PARTIAL^PSJPADPT(PSJY,.USER,.SELUSER,1,PSELMSG,,.PSFOUND,,PSALLPC)
  1. Q:$G(PSFOUND)
  1. W " ?? (No match found)"
  1. ;
  1. Q
  1. ;
  1. LIST(LIST,MSG) ; Write list in LIST(ID1)=ID1
  1. N II,DRGNAME,NUMBER,TAB,NAME,ID1,ID2
  1. S $P(TAB," ",80)=""
  1. Q:$D(LIST)<10
  1. I $L($G(MSG)) W !,MSG,!
  1. I $D(MSG)>1 D W !
  1. .S II=0 F S II=$O(MSG(II)) Q:'II W !,MSG(II)
  1. S ID1="" F S ID1=$O(LIST(ID1)) Q:ID1="" D
  1. .I LIST(ID1)="" W !,$E(TAB,1,10)_ID1 Q
  1. .W !,$E(TAB,1,14-$L(ID1))_ID1_" "_$P(LIST(ID1),"^")_" "_$P(LIST(ID1),"^",2)
  1. Q
  1. ;
  1. USERLIST(PSJINP,USER,USERX) ; Get list of selectable users in transactions matching date range, PADE device, and drug item criteria
  1. ; INPUT: PSJINP("
  1. ; OUTPUT: USER
  1. ;
  1. N PSJDEV,PADEV,PSDRG,PSJBDT,PSJEDT,PSJTRDT,TRANS,PSJDONE,PSUNAME,PSJII,PSJHTM,PSJDOTS
  1. S PSJHTM=$P($H,",",2),PSJDOTS=""
  1. K USER S PSJII=1
  1. M PSJDEV=PSJINP("PADEV")
  1. M PSDRG=PSJINP("PSDRG")
  1. S PSJBDT=$G(PSJINP("PSJBDT"))
  1. S PSJEDT=$G(PSJINP("PSJEDT"))
  1. S USER="" F S USER=$O(^PS(58.6,"USR",USER)) Q:USER="" D
  1. .S PSJTRDT=$$FMADD^XLFDT(PSJEDT,,,,1),PSJDONE=0
  1. .D DISPDOTS^PSJPDRUT(.PSJHTM,.PSJDOTS,1)
  1. .F S PSJTRDT=$O(^PS(58.6,"USR",USER,PSJTRDT),-1) Q:(PSJTRDT<PSJBDT)!$G(PSJDONE)!(PSJTRDT="") D
  1. ..D DISPDOTS^PSJPDRUT(.PSJHTM,.PSJDOTS,1)
  1. ..S TRANS=0 F S TRANS=$O(^PS(58.6,"USR",USER,PSJTRDT,TRANS)) Q:'TRANS!$G(PSJDONE) D
  1. ...N CAB,SYS
  1. ...S CAB=$P($G(^PS(58.6,+TRANS,0)),"^",2) I CAB]"" Q:'$D(PSJINP("PADEV",CAB))
  1. ...S SYS=$P($G(^PS(58.6,+TRANS,1)),"^",3) I SYS]"" Q:SYS'=$G(PSJINP("PSJPSYSE"))
  1. ...S PSUNAME=$P($G(^PS(58.6,+TRANS,5)),"^",2)
  1. ...S:$TR(PSUNAME,",")="" PSUNAME="PADE,USER"
  1. ...S USER(USER)=PSUNAME,USERX(PSUNAME)=USER
  1. ...S PSJDONE=1,PSJII=PSJII+1
  1. Q
  1. ;
  1. DRUGSEL(PSJINP,INDRUG,OUTDRUG,DRWPCK,PSJSTOP) ; Select drug(s) via screened ^PSDRUG lookup
  1. N COUNT,PSJCNT,DIR,X,Y,PSJDONE,DRGLIST,DRGNAME,PSJY,DRGN,PSJTMP,DUOUT,DTOUT
  1. K DRWPCK
  1. M DRGLIST=INDRUG
  1. S COUNT=0,PSJDONE=0
  1. D DRUGLIST^PSJPDRIN(.PSJINP,.DRGLIST)
  1. I $D(DRGLIST)<10 D Q
  1. .S PSJSTOP=1
  1. .W !!,"Drug Item: "
  1. .W !," No Drug Items available for selection.."
  1. .S DIR(0)="E" D ^DIR
  1. W ! D EN^DDIOL(" Enter '^ALL' to select all available drug items ") W !
  1. F Q:$G(DUOUT)!$G(DTOUT)!$G(PSJDONE) D
  1. .N PSJPART,II
  1. .N DIC,X,Y,PSJX
  1. .S DIC="^PSDRUG(",DIC(0)="QEAZ",DIC("A")="Select Drug Item: "_$S($D(OUTDRUG)>1:"",1:"^ALL// ")
  1. .S DIC("S")="I $D(DRGLIST(""IEN"",+Y))"
  1. .D ^DIC S PSJX=X
  1. .I $E(PSJX)="^" S Y=$$XALL^PSJPDRIP(PSJX)
  1. .I $G(DUOUT)!$G(DTOUT) S PSJSTOP=1 Q
  1. .I Y=-1 S Y=$S($D(OUTDRUG)>1:"",1:"ALL")
  1. .I Y="" D Q
  1. ..I $D(OUTDRUG)>1 S PSJDONE=1 Q
  1. ..W !!?2,"Select a single Item, several Items or enter ^ALL to select all Items."
  1. .S PSJY=Y
  1. .I PSJY,$D(DRGLIST("IEN",+PSJY)) D Q
  1. ..W " ",DRGLIST("IEN",+PSJY)
  1. ..S OUTDRUG(+PSJY)=$P($G(^PSDRUG(+PSJY,0)),"^")
  1. ..I $G(PSJINP("MANUNLOD")) D POCKET^PSJPDRIN(.PSJINP,+PSJY,.DRWPCK) S PSJDONE=1
  1. .I PSJX="",($D(OUTDRUG)<10) S Y="ALL"
  1. .I PSJX="",($D(OUTDRUG)>1) S PSJDONE=1
  1. .I PSJY="ALL" S OUTDRUG="ALL",PSJDONE=1 D Q
  1. ..I $G(PSJINP("MANUNLOD")) S DRWPCK="ALL" Q
  1. ..N DRGIEN S DRGIEN=0 F S DRGIEN=$O(INDRUG(DRGIEN)) Q:'DRGIEN S OUTDRUG(DRGIEN)=$P($G(^PSDRUG(+DRGIEN,0)),"^")
  1. Q
  1. ;
  1. PSYS(PSLAYGO) ; Get PADE Inventory System
  1. N PSYSIEN,PSYSCNT,PSYS,DIR,X,Y,PSYSLST,LISTDIR
  1. S PSYSIEN=0 F PSYSCNT=0:1 S PSYSIEN=$O(^PS(58.601,PSYSIEN)) Q:'PSYSIEN D
  1. .S PSYS=PSYSIEN
  1. .S PSYSLST(PSYSIEN)=$$UPPER^HLFNC($P($G(^PS(58.601,PSYSIEN,0)),"^"))_" "_$P($G(^PS(58.601,+PSYS,4)),"^")
  1. .S PSYSLSTX(PSYSCNT+1)=PSYSLST(PSYSIEN)_"^"_PSYSIEN
  1. .S LISTDIR=$G(LISTDIR)_$S($G(PSYSCNT):";",1:"")_(PSYSCNT+1)_":"_PSYSLST(PSYSIEN)
  1. I 'PSYSCNT D Q ""
  1. .S PSJSTOP=-1
  1. .D EN^DDIOL("No PADE Inventory data on file")
  1. .N DIR S DIR(0)="EA",DIR("A")="Press Return to Continue... " D ^DIR
  1. I PSYSCNT=1 S DIR("B")=$P($G(^PS(58.601,+PSYS,0)),"^")
  1. S DIR(0)="SAO^"_LISTDIR
  1. S DIR("A")="Select PADE Inventory System: "
  1. D ^DIR
  1. S PSYS=$S(Y>0:+Y,1:"") S:PSYS="" PSJSTOP=-1
  1. I +$G(PSYS) S PSYS=$P(PSYSLSTX(PSYS),"^",2) S:PSYS="" PSJSTOP=-1
  1. Q PSYS
  1. ;
  1. ENSYS() ; Get PADE Inventory System
  1. N PSYSIEN,PSYSCNT,PSYS,DIR,X,Y,PSYSLST,LISTDIR,PSYSNAM,PSYSALT
  1. K PSJSTOP
  1. F Q:$G(PSYS)!$G(PSJSTOP) D
  1. .D GETSYS(.PSYSLST,.PSYSLSTX,.PSYSNAM,.PSYSALT)
  1. .D SELSYS(.PSYSLST,.PSYSLSTX,.PSYSNAM,.PSYS)
  1. Q PSYS
  1. ;
  1. PTIX(PS586IEN,PSJOMS) ; Computed PATIENT to handle blank patients in "P" x-ref in Transaction file 586
  1. N PATIENT
  1. S PATIENT=$P($G(^PS(58.6,+$G(PS586IEN),0)),"^",15)
  1. I '$G(PATIENT) S PATIENT=$G(FDA(58.6,"+1,",14))
  1. I '$G(PATIENT) S PATIENT=$G(PSJOMS("DFN"))
  1. Q:$G(PATIENT) PATIENT
  1. Q "zz"
  1. ;
  1. DRGIX(PS586IEN,PSJOMS) ; Computed DRUG ID to handle unknown drugs in "P" x-ref in Transaction file 58.6
  1. I $P($G(^PS(58.6,+$G(PS586IEN),0)),"^",3) Q $P(^(0),"^",3)
  1. I $P($G(^PS(58.6,+$G(PS586IEN),1)),"^",6)]"" Q "zz~"_$P(^(0),"^",6)
  1. I $G(FDA(58.6,"+1,",2)) Q +$G(FDA(58.6,"+1,",2))
  1. I $G(PSJOMS("DRGTXT"))]"" Q "zz~"_$G(PSJOMS("DRGTXT"))
  1. Q "zz~UNKNOWN"
  1. ;
  1. DISPDOTS(PSJHTM,PSJDOTS,SECONDS) ; Check to see if more than SECONDS seconds has elapsed in $H, since PSJHTM.
  1. ; INPUT - PSJHTM = the 2nd comma piece of $H (seconds)
  1. ; PSJDOTS = flag indicating whether initial message "Searching for matching transactions.." has (1) or has not 0 or "" already been displayed
  1. I '$G(PSJHTM) S PSJHTM=$P($H,",",2)
  1. I ($P($H,",",2)-PSJHTM)>1 D
  1. .I '$G(PSJDOTS) W !?2,"Searching for matching transactions.." S PSJDOTS=1,PSJHTM=$P($H,",",2)
  1. .W "." S PSJHTM=$P($H,",",2)
  1. Q
  1. ;
  1. PADEUP(PADEV,PADEVUP) ; Return PADEVUP array, containing subscripts converted to upper case from incoming PADEV array
  1. N PADE
  1. S PADE="" F S PADE=$O(PADEV(PADE)) Q:PADE="" S PADEVUP($$UPPER^HLFNC(PADE))=PADEV(PADE)
  1. Q
  1. ;
  1. DIV(PSJDIV,PSJSTOP) ; Perform manual entry and validation of DIVISION (40.8)
  1. N PSJDONE,DIR,X,Y,DIVAR,DIVARX,PSJY,PSALLPC
  1. K PSJDIV
  1. D DIVLIST(.DIVAR,.DIVARX)
  1. S PSJDIV=""
  1. F Q:$G(PSJSTOP)!$G(PSJDONE) D
  1. .N PSJTMP
  1. .S DIR(0)="FAO^1:30",DIR("?")="^D DIVLKUP^PSJPDRUT(.DIVAR)"
  1. .S DIR("A")="Select Division: "_$S($D(PSJDIV)>1:"",1:" ^ALL// ")
  1. .D ^DIR I $E(X)="^" S Y=$$XALL^PSJPDRIP(X)
  1. .I X="",($D(PSJDIV)<10) S Y="ALL"
  1. .I Y="ALL" M PSJDIV=DIVAR S PSJDIV="ALL",PSJINP("PSJDIV")="ALL",PSJDONE=1 Q
  1. .I $G(DUOUT)!$G(DTOUT) S PSJSTOP=1 Q
  1. .I Y="" D Q
  1. ..I $D(PSJDIV)>1 S PSJDONE=1 Q
  1. ..W !!?2,"Select a single Division, several Divisions or enter ^ALL to select all Divisions."
  1. .S PSJY=Y
  1. .I $D(DIVAR(PSJY)) D Q
  1. ..N DIVIEN,PSALLPC
  1. ..S PSALLPC=1 ; return all data pieces from partial lookup
  1. ..S DIVIEN=$P(DIVAR(PSJY),"^",2)
  1. ..Q:'DIVIEN S PSJDIV(DIVIEN)=DIVAR(PSJY)
  1. ..W " ",PSJY," ",$P(DIVAR(PSJY),"^")
  1. .I $D(DIVARX(PSJY)) D Q
  1. ..N DIVIEN S DIVIEN=$P(DIVAR(DIVARX(PSJY)),"^",2)
  1. ..Q:'DIVIEN S PSJDIV(DIVIEN)=PSJY
  1. ..W " ",PSJY," ",DIVARX(PSJY) ;p365
  1. .S PSELMSG="Select a Division"
  1. .S PSALLPC=1 ; Return all data pieces from partial lookup
  1. .D PARTIAL^PSJPADPT(PSJY,.DIVARX,.PSJTMP,,PSELMSG,.DIVAR,.PSFOUND,,PSALLPC)
  1. .I $G(PSFOUND) N PSDIV,DIVIEN S PSDIV=$O(PSJTMP("")) I PSDIV]"" S DIVIEN=$P($G(PSJTMP(PSDIV)),"^",2) I DIVIEN S PSJDIV(DIVIEN)=PSDIV_"^"_DIVIEN
  1. .Q:$G(PSFOUND)
  1. .W " ?? (No match found)"
  1. Q
  1. ;
  1. DIVLKUP(DIVAR) ; Lookup Division
  1. D LIST^PSJPDRTR(.DIVAR,,15)
  1. Q
  1. ;
  1. DIVLIST(DIVAR,DIVARX) ; Get list of Divisions
  1. N DIVNAM,DIVIEN,DIVCNT
  1. S DIVNAM="" F DIVCNT=1:1 S DIVNAM=$O(^DG(40.8,"B",DIVNAM)) Q:DIVNAM="" D
  1. .S DIVIEN=$O(^DG(40.8,"B",DIVNAM,0))
  1. .S DIVAR(DIVIEN)=DIVNAM_"^"_DIVIEN,DIVARX(DIVNAM)=DIVIEN
  1. Q
  1. ;
  1. UPPER(PSTEXT) ; Convert X to upper case
  1. N X,Y
  1. S PSTEXT=$$UPPER^HLFNC(PSTEXT)
  1. Q PSTEXT
  1. ;
  1. GETSYS(PSYSLST,PSYSLSTX,PSYSNAM,PSYSALT) ; Get list of PADE Inventory Systems from file 58.601
  1. ;
  1. N PSYSIEN,PSYSCNT
  1. K PSYSLST,PSYSLSTX,PSYSNAM,PSYSALT,PSUPPER
  1. S PSYSIEN=0 F PSYSCNT=0:1 S PSYSIEN=$O(^PS(58.601,PSYSIEN)) Q:'PSYSIEN D
  1. .S PSYS=PSYSIEN
  1. .S PSYSLST("IEN",PSYSIEN)=$P($G(^PS(58.601,PSYSIEN,0)),"^")
  1. .S PSYSLST("NAME",PSYSLST("IEN",PSYSIEN))=PSYSIEN
  1. .S PSYSLSTX(PSYSCNT+1)=PSYSLST("IEN",PSYSIEN)_" "_$P($G(^PS(58.601,+PSYSIEN,4)),"^")_"^"_PSYSIEN
  1. .S PSYSNAM(PSYSLST("IEN",PSYSIEN))=PSYSIEN
  1. .S PSYSALT=$P($G(^PS(58.601,+PSYSIEN,4)),"^") I PSYSALT]"" S PSYSNAM($$UPPER^PSJPDRUT(PSYSALT))=PSYSIEN
  1. Q
  1. ;
  1. SELSYS(PSYSLST,PSYSLTX,PSYSNAM,PSYS) ; Select dispensing system for editing
  1. ; Input: PSYSLST - list of dispensing systems, PSYSLST("IEN",IEN)=name, PSYSLST("NAME",name)=IEN
  1. ; PSYSLSTX - list of dispensing systems, PSYSLSTX(list#)=name
  1. ; PSYSNAM - list of dispensing systems, PSYSNAM(name)=list#
  1. ; Output: PSYS - IEN of dispensing system in file 58.601
  1. N PSJY,PSFOUND,PSALLPC
  1. K PSYS S PSYS=""
  1. S DIR(0)="FAO",DIR("?")="^D LIST^PSJPDRTR(.PSYSLSTX,,15)"
  1. S DIR("A")="Select PADE Inventory System: "
  1. D ^DIR
  1. ;
  1. I $G(DUOUT)!$G(DTOUT) S PSJSTOP=1 Q
  1. I Y=""!($TR(Y," ")="")!(Y["^") D Q
  1. .W !!?2,"Select a PADE Dispensing Inventory system or '^' to exit."
  1. S PSJY=Y
  1. I $D(PSYSLSTX(+PSJY)) D Q
  1. .W " ",$P(PSYSLSTX(+PSJY),"^")
  1. .S PSYS=$P(PSYSLSTX(+PSJY),"^",2)
  1. I $D(PSYSNAM(PSJY)) D Q
  1. .W " ",PSYSNAM(PSJY)
  1. .S PSYS=PSYSNAM(PSJY)
  1. I $D(PSYSALT(PSJY)) D Q
  1. .W " ",PSYSLST(PSYSALT(PSJY))
  1. .S PSYS=PSYSALT(PSJY)
  1. S PSALLPC=1 ; return all data pieces from partial lookup
  1. D PARTIAL^PSJPADPT(.PSJY,.PSYSNAM,.PSJY,1,,.PSYSLSTX,.PSFOUND,,PSALLPC)
  1. I '$G(PSFOUND),($G(PSJY)]"") D Q
  1. .N DIR,X,Y,FDA
  1. .S DIR("A")=" Are you adding '"_PSJY_"' as a new PADE INVENTORY SYSTEM? "
  1. .S DIR(0)="YAO",DIR("B")="N" D ^DIR Q:'Y
  1. .S FDA(58.601,"?+1,",.01)=PSJY
  1. .D UPDATE^DIE("E","FDA","PSYS","ERR")
  1. .S PSYS=$S($G(PSYS(1)):+$G(PSYS(1)),1:"")
  1. I $G(PSFOUND) S PSYS=$O(PSJY(0)),PSYS=+$G(PSYSNAM(PSYS)) I 'PSYS S PSYS=+$G(PSYSLST("NAME",PSYS))
  1. Q
  1. ;
  1. PADEUSR(PSJPSYS,PSJPDUSR) ; Return Vista user ID for PADE user PSJPDUSER, if it exists
  1. N PSJSYSE,PSJVUSR,PSJVAL,PSJRSLT,PADUIEN
  1. Q:$G(PSJPSYS)="" ""
  1. Q:$G(PSJPDUSR)="" ""
  1. S PSJSYSE=$P($G(^PS(58.601,+PSJPSYS,0)),"^")
  1. Q:PSJSYSE="" ""
  1. S PSJVAL(1)=PSJSYSE
  1. S PSJVAL(2)=PSJPDUSR
  1. S PSJVUSR=$$FIND1^DIC(58.64,,"K",.PSJVAL)
  1. Q:'PSJVUSR ""
  1. S PADUIEN=+$G(PSJVUSR)
  1. D GETS^DIQ(58.64,+PSJVUSR,"2","IE","PSJRSLT")
  1. S PSJVUSR=+$G(PSJRSLT(58.64,PSJVUSR_",",2,"I"))_"^"_$G(PSJRSLT(58.64,PSJVUSR_",",2,"E"))_"^"_PADUIEN
  1. Q PSJVUSR
  1. ;
  1. DEVSCRN(PSJINP,PSPDIEN) ; Screen PADE cabinet PSPDIEN (file 58.63)
  1. ; Compare PSJINP("PSJPSYS") to System Field (#1)(#58.63)
  1. ; and PSJINP("PSJDIV") to Division Field (#2) (58.63)
  1. ; Manually coded version of screen S PSJSCR="I $D(PSJINP(""PSJDIV"",+$G(^(2))))&($P($G(^(0)),""^"",2)=PSJPSYS)&'$$EMPTY^PSJPADPT(+Y)"
  1. N PADEOK,DIVIEN,DIVNAME,SYSIEN,DIVTMP,DIVOK
  1. S PADEOK=1
  1. S DIVIEN=$P($G(^PS(58.63,+$G(PSPDIEN),2)),"^")
  1. S DIVNAME=$P($G(^DG(40.8,+DIVIEN,0)),"^")
  1. I DIVNAME="" Q 0 ; No division on file for cabinet, quit
  1. ; Division doesn't match any in PSJINP("PSJDIV"), quit
  1. S DIVOK=0 S DIVTMP="" F S DIVTMP=$O(PSJINP("PSJDIV",DIVTMP)) Q:DIVTMP=""!$G(DIVOK) I $P($G(PSJINP("PSJDIV",DIVTMP)),"^",2)=DIVIEN S DIVOK=1
  1. Q:'DIVOK 0
  1. ; System doesn't match PSJINP("PSJPSYS"), quit
  1. S SYSIEN=$P($G(^PS(58.63,+$G(PSPDIEN),0)),"^",2)
  1. I SYSIEN'=+$G(PSJINP("PSJPSYS")) Q 0
  1. ; Cabinet is empty, quit
  1. Q:$$EMPTY^PSJPADPT(+PSPDIEN) 0
  1. Q PADEOK
  1. ;
  1. UNIQUE(PSJY,PADE) ; Is PSJY unique subscript in PADE(), or are there other partial matches (PADE(PSJY), PADE(PSJYnn), PADE(PSJYxx), etc)?
  1. N NEXTSUB,PSJYLEN
  1. I $G(PSJY)="" Q 1
  1. I $D(PADE)<10 Q 1
  1. S NEXTSUB=$O(PADE(PSJY))
  1. S PSJYLEN=$L(PSJY)
  1. I $E(NEXTSUB,1,PSJYLEN)=PSJY Q 0
  1. Q 1
  1. ;
  1. PSB(PSJOMS) ; Get Patient Specific Bin info
  1. ;
  1. N PSPADFN,PSPADNM,PSPADPK
  1. I (PSJOMS("COMMENT")'["PATIENT SPECIFIC BIN") Q
  1. N PSSN S PSSN=$P(PSJOMS("COMMENT"),"-",2)
  1. I $G(PSSN) S PSPADFN=$$PATSSN(PSSN) I $G(PSPADFN) S PSJOMS("SSN")=PSSN,PSJOMS("DFN")=PSPADFN
  1. I $G(PSPADFN) S PSPADNM=$P($G(^DPT(+PSPADFN,0)),"^")
  1. I ($G(PSPADNM)'="") S (PSJOMS("DFN"),PSJOMS("PTID"))=PSPADFN D
  1. .S PSJOMS("PTNAMA")=$P(PSPADNM,",")
  1. .S PSJOMS("PTNAMB")=$P(PSPADNM,",",2)
  1. S PSPADPK=$G(PSJOMS("PKT"))
  1. S PSJOMS("PKT")=PSJOMS("PKT")_"PSB"
  1. Q
  1. ;
  1. PATSSN(PSSN) ; If valid PSSN patient SSN, return patient PDFN pointer to ^DPT
  1. N PSVAL,PSINDEX,PSJDFN
  1. S PSJDFN=""
  1. I $G(PSSN) S (X,PSVAL)=PSSN,PSINDEX="SSN" S PSJDFN=$$FIND1^DIC(2,,"X",PSVAL,PSINDEX,,"PSERR")
  1. I '$G(PSJDFN),$G(PSSN) S PSJDFN=$O(^DPT("SSN",PSSN,""))
  1. I '$G(PSJDFN),$G(PSSN) N TMPSSN S TMPSSN=$TR($J(+PSSN,9)," ",0) S PSJDFN=$O(^DPT("SSN",TMPSSN,""))
  1. I 'PSJDFN S PSJDFN=""
  1. I PSJDFN I '$D(^DPT(PSJDFN)) S PSJDFN=""
  1. Q PSJDFN
  1. ;
  1. TTYPDIR(PSJPSYS,BDT,EDT) ; build DIR(0) string of selectable transaction types
  1. N TTYPDIR,TTARRAY,TT,II
  1. Q:'$G(PSJPSYS) ""
  1. Q:'$D(^PS(58.601,+PSJPSYS,0)) ""
  1. D TTYPES(PSJPSYS,BDT,EDT,.TTARRAY)
  1. S TTYPDIR=""
  1. S TT="" F II=1:1 S TT=$O(TTARRAY(TT)) Q:TT="" D
  1. .N TTYPNAM
  1. .S TTYPNAM=TT
  1. .I II=1 S TTYPDIR="1:"_TTYPNAM
  1. .I II>1 S TTYPDIR=TTYPDIR_";"_II_":"_TTYPNAM
  1. Q TTYPDIR
  1. ;
  1. TTYPES(PSJPSYS,BDT,EDT,OUTTYP) ; Get list of all transaction Types for system PSJPSYS between begin date BDT and end date EDT
  1. N TDT,SYSNAM,TDEV,TXIEN
  1. K OUTTYP
  1. S SYSNAM=$P($G(^PS(58.601,+$G(PSJPSYS),0)),"^")
  1. S TDT=$$FMADD^XLFDT(BDT,,,-.1)
  1. F S TDT=$O(^PS(58.6,"B",TDT)) Q:(TDT="")!(TDT>EDT) S TXIEN=0 F S TXIEN=$O(^PS(58.6,"B",TDT,TXIEN)) Q:'TXIEN D
  1. .N TT
  1. .Q:($P($G(^PS(58.6,TXIEN,1)),"^",3)'=SYSNAM)
  1. .S TT=$P($G(^PS(58.6,TXIEN,0)),"^",5) Q:TT=""
  1. .S TTYPNAM=$$TTEX(TT)
  1. .Q:$D(OUTTYP(TTYPNAM))
  1. .Q:'(",D,L,R,F,U,E,C,R,W,B,V,")[(","_TT_",")
  1. .S OUTTYP(TTYPNAM)=""
  1. Q
  1. ;
  1. DEFTRAN(DEFTRAN) ; Get default list of ALL transaction types if none were found in transaction file
  1. N II,TTYPNAM,TRANLIST,TTYPCOD
  1. S TRANLIST="V:Dispense,L:Load,U:Unload,F:Fill/Refill,B:Empty Bin,C:Count,R:Return,W:Waste,E:Expired,A:Discrepancy"
  1. N II F II=1:1:$L(TRANLIST,",") S II=$P(TRANLIST,",",II) Q:II="" D
  1. .S TTYPCOD=$P(II,":"),TTYPNAM=$P(II,":",2)
  1. .S DEFTRAN(TTYPNAM)=TTYPCOD
  1. Q
  1. ;
  1. TTEX(TTCODE) ; Convert Transaction Type code to Type Name
  1. N TTNAME,TT
  1. S TT=$$UPPER^PSJPDRUT($G(TTCODE))
  1. S TTNAME=$S(TT="V":"Dispense",TT="L":"Load",TT="U":"Unload",TT="F":"Refill",TT="B":"Empty Bin",TT="C":"Count",TT="R":"Return",TT="W":"Waste",TT="E":"Expired",TT="D":"Destock",TT="A":"Discrepancy",TT="N":"Cancel",1:"Other")
  1. Q TTNAME
  1. ;
  1. EXTT(TTNAME) ; Convert Transaction Type Name to Type Code
  1. N TTCODE,TT
  1. S TT=$$UPPER^PSJPDRUT($G(TTNAME))
  1. S:TT="" TT="OTHER"
  1. S TTCODE=$P($T(@($E($P(TT," "),1,8)_"^PSJPDRUT")),";;",2)
  1. S:TTCODE="" TTCODE="O"
  1. Q TTCODE
  1. ;
  1. DISPENSE ;;V
  1. VEND ;;V
  1. LOAD ;;L
  1. UNLOAD ;;U
  1. REFILL ;;F
  1. EMPTY ;;B
  1. COUNT ;;C
  1. RETURN ;;R
  1. WASTE ;;W
  1. EXPIRED ;;E
  1. DESTOCK ;;D
  1. DISCREPA ;;A
  1. CANCEL ;;N
  1. UNKNOWN ;;O
  1. OTHER ;;O
  1. Q