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

PSJPDRU1.m

Go to the documentation of this file.
  1. PSJPDRU1 ;BIR/MV-PADE REPORT UTILITIES ;18 JUN 96 / 2:58 PM
  1. ;;5.0;INPATIENT MEDICATIONS;**317**;16 DEC 97;Build 130
  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. PATIENT(PSJINP) ; Get list of patients
  1. N PSJDONE,PATX,PAT,PATXX,PATSSN K PSJPAT,PSJSTOP
  1. S PSJSTOP=""
  1. D PATLIST^PSJPDRU1(.PSJINP)
  1. I $D(^TMP($J,"PSJPTLST","PAT"))<10 D Q
  1. .W !!,"Patient: "
  1. .W !," No patients available for selection..",!
  1. F Q:$G(PSJDONE)!$G(PSJSTOP) D
  1. .D SELPAT^PSJPDRU1(.PSJINP)
  1. Q
  1. ;
  1. PATLIST(PSJINP) ; Build list of patients that may be selected based on transaction date range and PADE Inbound System
  1. N PSJDEV,PADEV,PSDRG,PSJBDT,PSJEDT,PSJTRDT,TRANS,PSJDONE,PSUNAME,PSJII,PSPTNAME,PSPTLN,PSPTFN,PSPTID,PSPTND3,PATRAWID,PSJHTM,PSJDOTS
  1. S PSJHTM=$P($H,",",2),PSJDOTS="" ; If search takes too long, may have to print "Searching..", followed by dots every 2 seconds
  1. K ^TMP($J,"PSJPTLST")
  1. K PAT 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 PAT="" F S PAT=$O(^PS(58.6,"P",PAT)) Q:PAT="" D
  1. .D DISPDOTS^PSJPDRUT(.PSJHTM,.PSJDOTS,1)
  1. .S PSJTRDT=$$FMADD^XLFDT(PSJBDT,,,,-1),PSJDONE=0
  1. .F S PSJTRDT=$O(^PS(58.6,"P",PAT,PSJTRDT)) Q:(PSJTRDT>PSJEDT)!$G(PSJDONE)!(PSJTRDT="") D
  1. ..N PSDRG S PSDRG="" F S PSDRG=$O(^PS(58.6,"P",PAT,PSJTRDT,PSDRG)) Q:PSDRG="" D
  1. ...D DISPDOTS^PSJPDRUT(.PSJHTM,.PSJDOTS,1)
  1. ...S TRANS=0 F S TRANS=$O(^PS(58.6,"P",PAT,PSJTRDT,PSDRG,TRANS)) Q:'TRANS D
  1. ....I $E(PSDRG,1,3)'="zz~" Q:'$D(PSJINP("PSDRG",PSDRG))
  1. ....I $E(PSDRG,1,3)="zz~" Q:'$D(PSJINP("PSDRG","*"_$E(PSDRG,4,99)))
  1. ....N CAB,SYS,PSPTID,PATND0,PATSSN
  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 PATND0=$G(^DPT(+PAT,0)) S PSPTNAME=$P(PATND0,"^"),PATSSN=$P(PATND0,"^",9) I PATSSN S PSPTNAME=PSPTNAME_" ("_$E(PATSSN,$L(PATSSN)-3,$L(PATSSN))_")"
  1. ....S PSPTND3=$G(^PS(58.6,+TRANS,3)) S PSPTLN=$P(PSPTND3,"^",5),PSPTFN=$P(PSPTND3,"^",6),PATRAWID=$P(PSPTND3,"^",7)
  1. ....S PSPTID=$S(($G(PAT)):PAT,$G(PATRAWID):PATRAWID,PAT="zz":"-",1:PAT)
  1. ....S PATSSN=$S($G(PATSSN):PATSSN,1:PSPTID)
  1. ....I PSPTNAME="" S PSPTNAME=$S((PSPTLN'="")&(PSPTFN'=""):PSPTLN_","_PSPTFN,PSPTLN'="":PSPTLN,PSPTFN'="":PSPTFN,1:"")
  1. ....I PSPTNAME="" S PSPTNAME=$P(PSPTND3,"^",4)
  1. ....I PSPTID="-",(PSPTNAME]"") S PSPTID="*",PSPTNAME="UNKNOWN PATIENT" S:'$G(PATSSN) PATSSN="*"
  1. ....I PSPTNAME="" S PSPTNAME="NO PATIENT"
  1. ....;
  1. ....S ^TMP($J,"PSJPTLST","PAT",PSPTID)=PSPTNAME,^TMP($J,"PSJPTLST","PATX",PSPTNAME)=PSPTID
  1. ....I PATSSN?9N S ^TMP($J,"PSJPTLST","PSPSSN",$E(PATSSN,6,9),PSPTID)=PSPTNAME
  1. ....I PATSSN'="" S ^TMP($J,"PSJPTLST","PATRAW",PATSSN)=PSPTNAME
  1. ....I PAT'="zz" S PSJDONE=1
  1. ....S PSJII=PSJII+1
  1. Q
  1. ;
  1. SELPAT(PSJINP) ; Prompt for one patient (or ALL)
  1. N DIR,X,Y,PATNAME,DUOUT,DTOUT
  1. N PSJPART,II,PSELMSG,PLSTMSG
  1. K PSJSTOP S PSJSTOP=""
  1. W ! D EN^DDIOL(" Enter '^ALL' to select all Patients associated with PADE transactions.") W !
  1. S PLSTMSG(1)="Transactions matching the entered Date Range and Division "
  1. S PLSTMSG(2)="exist for the Patients listed below."
  1. S DIR(0)="FAO^1:30",DIR("?")="^D TMPLIST^PSJPDRU1(""PATRAW"",20)"
  1. ;
  1. S DIR("A")="Select Patient: "_$S($D(^TMP($J,"PSJPTLST","SELPAT"))>1:"",1:"^ALL// ")
  1. D ^DIR I X="" S Y=$S($D(^TMP($J,"PSJPTLST","SELPAT"))<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 ^TMP($J,"PSJPTLST","SELPAT")=^TMP($J,"PSJPTLST","PAT") S ^TMP($J,"PSJPTLST","SELPAT")="ALL",PSJDONE=1 Q
  1. I Y="" D Q
  1. .I $D(^TMP($J,"PSJPTLST","SELPAT"))>1 S PSJDONE=1 Q
  1. .W !!?2,"Select a single Patient, several Patients or enter ^ALL to select all Patients."
  1. S PSJY=Y
  1. I $D(^TMP($J,"PSJPTLST","PSPSSN",PSJY)) D Q
  1. .N I,SSN,ID,DIR,LISTDIR,LISTARR,NAME
  1. .S SSN=PSJY S ID="" F I=1:1 S ID=$O(^TMP($J,"PSJPTLST","PSPSSN",SSN,ID)) Q:ID="" D
  1. ..I I=1 D Q
  1. ...S LISTDIR="1:"_^TMP($J,"PSJPTLST","PSPSSN",SSN,ID)_"("_SSN_")",LISTARR(1)=ID_"^"_^TMP($J,"PSJPTLST","PSPSSN",SSN,ID)
  1. ...S DIR("A",1)="1 "_^TMP($J,"PSJPTLST","PSPSSN",SSN,ID)
  1. ..S LISTDIR=$G(LISTDIR)_";"_I_":"_^TMP($J,"PSJPTLST","PSPSSN",SSN,ID)_"("_SSN_")",LISTARR(I)=ID_"^"_^TMP($J,"PSJPTLST","PSPSSN",SSN,ID)
  1. ..S DIR("A",I)=I_" "_^TMP($J,"PSJPTLST","PSPSSN",SSN,ID)
  1. .I '$O(DIR("A",1)) S Y=1 W " "_$P(LISTARR(Y),"^",2)
  1. .I $O(DIR("A",1)) S DIR(0)="SOA^"_LISTDIR,DIR("A")="Select Patient: " D ^DIR
  1. .I Y S ID=$P(LISTARR(Y),"^"),NAME=$P(LISTARR(Y),"^",2),^TMP($J,"PSJPTLST","SELPAT",ID)=NAME
  1. I $D(^TMP($J,"PSJPTLST","PAT",PSJY)) D Q
  1. .W " ",^TMP($J,"PSJPTLST","PAT",PSJY) S ^TMP($J,"PSJPTLST","SELPAT",PSJY)=^TMP($J,"PSJPTLST","PAT",PSJY)
  1. I $D(^TMP($J,"PSJPTLST","PATX",PSJY)) D Q
  1. .W " ",^TMP($J,"PSJPTLST","PATX",PSJY) S ^TMP($J,"PSJPTLST","SELPAT",PSJY)=^TMP($J,"PSJPTLST","PATX",PSJY)
  1. S PSELMSG="Select a Patient"
  1. D PARTPT^PSJPDRU1(PSJY)
  1. Q:$D(^TMP($J,"PSJPTLST","SELPAT"))>1
  1. W " ?? (No match found)"
  1. Q
  1. ;
  1. TMPLIST(LIST,MAX) ; Write list in LIST(ID1)=ID1
  1. N II,DRGNAME,NUMBER,TAB,NAME,ID1,ID2,PSCNT,DUOUT,DTOUT,DIR,X,Y
  1. S $P(TAB," ",80)=""
  1. S PSCNT=0
  1. Q:$D(^TMP($J,"PSJPTLST",LIST))<10
  1. S ID1="" F S ID1=$O(^TMP($J,"PSJPTLST",LIST,ID1)) Q:ID1=""!$G(DTOUT)!$G(DUOUT) D
  1. .I ^TMP($J,"PSJPTLST",LIST,ID1)="" W !,$E(TAB,1,10)_ID1 Q
  1. .N PSJMARG
  1. .S PSJMARG=$S($E(ID1)="*":$E(TAB,1,17),1:$E(TAB,1,14-$L(ID1)))
  1. .W !,PSJMARG_ID1_" "_$P(^TMP($J,"PSJPTLST",LIST,ID1),"^")_" "_$P(^TMP($J,"PSJPTLST",LIST,ID1),"^",2)
  1. .S PSCNT=$G(PSCNT)+1
  1. .I $G(MAX),(PSCNT>$G(MAX)) W !! S DIR(0)="E" D ^DIR S PSCNT=0 W !!
  1. Q
  1. ;
  1. PARTPT(PSJY) ; 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
  1. ;
  1. ; ^TMP($J,"PSJPTLST","PAT",PSPTID)=PSPTNAME
  1. ; ^TMP($J,"PSJPTLST","PATX",PSPTNAME)=PSPTID
  1. ; I PATSSN?9N S ^TMP($J,"PSJPTLST","PSPSSN",$E(PATSSN,6,9),PSPTID)=PSPTNAME
  1. ; I PATSSN'="" S ^TMP($J,"PSJPTLST","PATRAW",PATSSN)=PSPTNAME
  1. ;
  1. K ^TMP($J,"PSJPTLST","ITM"),^TMP($J,"PSJPTLST","ITMX")
  1. S II=1,ITMID="" F S ITMID=$O(^TMP($J,"PSJPTLST","PAT",ITMID)) Q:ITMID="" D
  1. .Q:ITMID="IEN"!(ITMID="NAME")
  1. .S ^TMP($J,"PSJPTLST","ITM",ITMID)=$P(^TMP($J,"PSJPTLST","PAT",ITMID),"^")
  1. .S ^TMP($J,"PSJPTLST","ITMX",^TMP($J,"PSJPTLST","PAT",ITMID))=$P(^TMP($J,"PSJPTLST","PAT",ITMID),"^",2)
  1. ;
  1. Q:$D(^TMP($J,"PSJPTLST","ITM"))<10
  1. F ITM="" F S ITM=$O(^TMP($J,"PSJPTLST","ITM",ITM)) Q:ITM="" D
  1. .I $E(ITM,1,$L(PSJY))=PSJY S PSJPART(II,ITM)=^TMP($J,"PSJPTLST","PAT",ITM) S II=II+1 Q
  1. .I $E(^TMP($J,"PSJPTLST","ITM",ITM),1,$L(PSJY))=PSJY S PSJPART(II,ITM)=^TMP($J,"PSJPTLST","ITM",ITM) D Q
  1. ..S PSJPART(II,ITM)=PSJPART(II,ITM) S II=II+1
  1. ;
  1. I $D(PSJPART(1)) D
  1. .N DIR,STRING,CNT
  1. .I '$O(PSJPART(1)) S PSJTMP=$O(PSJPART(1,"")) S ^TMP($J,"PSJPTLST","SELPAT",PSJTMP)=PSJPART(1,PSJTMP) D Q
  1. ..W !," "_$O(PSJPART(1,"")),?15,PSJPART(1,PSJTMP)
  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_" "_$P($G(PSJPART(CNT,ITMID)),"^")
  1. .S DIR("A")="Choose 1-"_+$O(PSJPART(9999999),-1)_": "
  1. .S DIR(0)="SAO^"_STRING D ^DIR
  1. .I Y>0 N PSPTSEL S PSPTSEL=$O(PSJPART(+Y,"")),^TMP($J,"PSJPTLST","SELPAT",PSPTSEL)=$G(PSJPART(+Y,PSPTSEL)) D Q
  1. ..N ID2 S ID2=$G(PSJPART(+Y,PSPTSEL)) I ID2]"" W " ",ID2
  1. .S PSJY=""
  1. Q
  1. ;
  1. PTTRFLG(PSJINP) ; Return patient selection flag
  1. ; INPUT: PSJINP array of all responses to report prompts
  1. ; OUTPUT: FLAG indicating 1-All (Patients and Missing, or Blank, Patients),
  1. ; 2-Only Individual Patients (exclude missing pateints),
  1. ; 0-Only Missing or Blank patients
  1. K PATFLG,PSJOB
  1. S PATFLG=0
  1. S PSJOB=$S($G(PSJINP("PSJTSK")):+$G(PSJINP("PSJTSK")),1:$J)
  1. S PATFLG=($G(^TMP(PSJOB,"PSJPAT"))="ALL") ; All individual patients PLUS all non-patient transactions
  1. I 'PATFLG S PATFLG=$O(^TMP(PSJOB,"PSJPAT",0)) D ; One or more individual patients
  1. .I PATFLG!(PATFLG="*") S PATFLG=2
  1. I PATFLG=2,$D(^TMP(PSJOB,"PSJPAT","-")) S PATFLG=1 ; One or more individual patients PLUS non-patient transactions
  1. Q PATFLG
  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. BLDSTR(PSJINP,PSLNOD,PSJCOMM) ; Build output data string
  1. ; INPUT: PSJINP() = array of user report input/selections
  1. ; PSLNOD = header node from PADE INBOUND TRANSACTION file (#58.6), by way of LIST^DIC call output in ^TMP($J,"TSCREEN"
  1. ; OUTPUT: PSLNDSTR = string of report output to be stored in ^TMP($J,"PSJPDRTR"
  1. N PSJPSYS,PSJCAB,PSJDRG,II,PSJCOL,PSJOVR,PSJUID,PSJPAT,PSJQTY,PSJTTYP,PSJPUSR,PSJTYABB,PSAB,PSTMP,PSJTRDT,PSJTRDMO,PSJTYPNM,PSJTYPCD
  1. N PSJUSRID,PSJWITID
  1. S PSJPSYS=+PSJINP("PSJPSYS")
  1. M PSJCAB=PSJINP("PADEV")
  1. M PSJDRG=PSJINP("PSDRG")
  1. ; Format Date to external
  1. K PSLNDSTR
  1. S PSLNDSTR=$P(PSLNOD,"^",6,99)
  1. S PSJTRDT=$TR($P($$FMTE^XLFDT($P(PSLNDSTR,"^"),2),":",1,2),"@"," ")
  1. S $P(PSJTRDT,"/")=$TR($J($P(PSJTRDT,"/"),2)," ",0)
  1. S $P(PSLNDSTR,"^")=PSJTRDT
  1. ; Format Override; depends on transaction type of the 58.6 entry (e.g., load/unload can't be an override, should be null)
  1. S PSJTYPNM=$P(PSLNDSTR,"^",2)
  1. S PSJTYPCD=$$EXTT^PSJPDRUT(PSJTYPNM)
  1. ;S PSJOVR=$S(PSJTYPCD="V":1,(PSJTYPCD="R"):1,1:"") I PSJOVR S PSJOVR=$S($P(PSLNDSTR,"^",3):"N",1:"Y")
  1. S PSJOVR=$$PTRNSTYP^PSJPAD7I(PSJTYPCD) S:'PSJOVR PSJOVR=""
  1. I PSJOVR S PSJOVR=$S($P(PSLNDSTR,"^",3):"N",1:"Y")
  1. S $P(PSLNDSTR,"^",3)=$S($G(PSJINP("PSJDELM"))="R":" "_PSJOVR,1:PSJOVR)
  1. ; Format Patient (Add ID to name - last 4 of SSN)
  1. S PSJPAT=$P(PSLNDSTR,"^",7) D
  1. .N PATNAME,PATSSN
  1. .S PATNAME=$P($G(^DPT(+PSJPAT,0)),"^")
  1. .I PATNAME="" D Q
  1. ..N TRANS S TRANS=+$G(PSLNOD)
  1. ..S PSJPAT=$P($G(PSLNDSTR),"^",13)
  1. ..I TRANS S PATSSN=$P($G(^PS(58.6,+TRANS,3)),"^",7) I PATSSN S PSJPAT=PSJPAT_"("_PATSSN_")"
  1. .S PATSSN=$P($G(^DPT(+PSJPAT,0)),"^",9) Q:$G(PATSSN)=""
  1. .S PSJPAT=PATNAME_"("_$E(PATSSN,6,9)_")"
  1. S $P(PSLNDSTR,"^",7)=PSJPAT
  1. ; Pull out Comment to PSJCOMM.
  1. S PSJCOMM=$P(PSLNDSTR,"^",12)
  1. ; Add ID's to User and Witness
  1. S PSJPUSR=""
  1. S PSJUSRID=$P(PSLNDSTR,"^",8) D
  1. .Q:PSJUSRID="" S PSJPUSR=$$PADEUSR^PSJPDRUT(+$G(PSJPSYS),PSJUSRID)
  1. .I 'PSJPUSR S PSJPUSR=$P(PSJPUSR,"^",3)
  1. .S PSJUSRID="("_PSJUSRID_")"
  1. S PSJWITID=$P(PSLNDSTR,"^",10) S:PSJWITID'="" PSJWITID="("_PSJWITID_")"
  1. F II=4:1:6 S PSTMP=$P(PSLNDSTR,"^",II) I PSTMP["." S PSTMP=$P(PSTMP,".")_"."_$E($P(PSTMP,".",2),1,2),$P(PSLNDSTR,"^",II)=PSTMP
  1. ; If Expected Balance is null, check for Actual Balance
  1. N PSABC,PSEBC S PSABC=$P(PSLNOD,"^",23),PSEBC=$P(PSLNDSTR,"^",10)
  1. S $P(PSLNDSTR,"^",10)=$S(((PSEBC="")&PSABC):PSABC,1:PSEBC)
  1. S PSLNDSTR=$P(PSLNDSTR,"^",1,7)_"^"_$S($P(PSJPUSR,"^",2)]"":$P(PSJPUSR,"^",2),1:$P(PSLNDSTR,"^",9))_PSJUSRID_"^"_$P(PSLNDSTR,"^",11)_PSJWITID_"^^"
  1. ; Transaction Type conversion
  1. S PSJTTYP=$$TTEX^PSJPDRUT(PSJTYPCD)
  1. ;
  1. ; Signed Quantity as interpreted by PADE inbound based on Transaction Type
  1. S PSJQTY=+$P(PSLNDSTR,"^",5) D
  1. .N TMPARRAY,TSIGN S TMPARRAY(6)=PSJQTY
  1. .S TMPARRAY(5)=$$EXTT^PSJPDRUT(PSJTTYP)
  1. .S TSIGN=$$TSIGN^PSJPADIT(.TMPARRAY) S TSIGN=$S(TSIGN="-":"-",1:"")
  1. .S TMPARRAY(6)=$S(PSJQTY["-":PSJQTY/-1,1:PSJQTY)
  1. .S PSJQTY=$S($G(TMPARRAY(5))="W":"NA",$G(TMPARRAY(6)):TSIGN_TMPARRAY(6),1:0)
  1. ;
  1. I PSJQTY["." S PSJQTY=$P(PSJQTY,".")_"."_$E($P(PSJQTY,".",2),1,2)
  1. S $P(PSLNDSTR,"^",5)=PSJQTY
  1. ;
  1. I PSJTTYP="Count" D
  1. .N PSENDBAL,PSBEGBAL S PSENDBAL=$P(PSLNDSTR,"^",6) I 'PSENDBAL,$G(PSJQTY) S PSENDBAL=PSJQTY S $P(PSLNDSTR,"^",6)=PSJQTY
  1. .S PSBEGBAL=$P(PSLNDSTR,"^",4) I 'PSBEGBAL,$G(PSJQTY) S PSBEGBAL=PSJQTY S $P(PSLNDSTR,"^",4)=PSJQTY
  1. ; Right Justify Quantities if formatted output
  1. I $G(PSJINP("PSJDELM"))'="D" F II=4:1:6 S $P(PSLNDSTR,"^",II)=$J($P(PSLNDSTR,"^",II),5)
  1. S $P(PSLNDSTR,"^",2)=PSJTTYP
  1. ; If delimited output, make adjustments
  1. I $G(PSJINP("PSJDELM"))="D" D
  1. .; If delimited output, add comment to end of string
  1. .I PSJCOMM'="" S PSLNDSTR=PSLNDSTR_"^"_PSJCOMM
  1. .; Break out Patient,User, and Witness ID's into separate delimited pieces if delimited output
  1. .N PIECE F PIECE=7,9,11 D
  1. ..N NAMID,NAM,ID S NAMID=$P(PSLNDSTR,"^",PIECE)
  1. ..S NAM=$P(NAMID,"("),ID=$P(NAMID,"(",2),ID=$TR(ID,")")
  1. ..S PSLNDSTR=$P(PSLNDSTR,"^",1,PIECE-1)_"^"_NAM_"^"_ID_"^"_$P(PSLNDSTR,"^",PIECE+1,99)
  1. Q PSLNDSTR
  1. ;
  1. INSYSPAR(PSPARACT) ; Allow edit of PSJ PADE OE BALANCES parameter.
  1. ; Input = PSPARACT - Default parameter setting - only prompt if 0(NO).
  1. ; - If 1(YES), set without prompting - if vendor is activated, system must also be activated
  1. N DIR,X,Y,PSPARIEN,PSALLOFF,PSPARVAL,PSPARER
  1. S PSPARIEN=$$FIND1^DIC(8989.51,,,"PSJ PADE OE BALANCES")
  1. S PSALLOFF=0
  1. I '$G(PSPARACT) D Q:'PSALLOFF
  1. .S DIR(0)="YAO",DIR("B")="Y"
  1. .S DIR("A")="Completely disable PADE IOE indicators (for ALL vendors)? "
  1. .S DIR("?",1)=" This sets the ""PSJ PADE OE BALANCES"" system parameter that"
  1. .S DIR("?",2)=" inactivates all PADE indicators in Inpatient Order Entry,"
  1. .S DIR("?",3)=" (IOE) for all vendors. To inactivate one specific vendor only,"
  1. .S DIR("?")=" use the ""DISPLAY PADE INDICATORS IN IOE?"" prompt."
  1. .D ^DIR
  1. .S PSALLOFF=$S($G(Y):1,1:0)
  1. S PSPARVAL=$S($G(PSPARACT):1,1:0)
  1. D EN^XPAR("SYS",PSPARIEN,,PSPARVAL,"PSPARER")
  1. I $D(PSPARER)>1 W !,"ERROR - Parameter not set"
  1. Q
  1. ;
  1. DEVONOFF(PSJPSYS,OFFON) ; Set status of all dispensing devices (cabinet) to OFF or ON for system PSJPSYS
  1. ;
  1. N DIE,DA,DR,X,Y,PSVAL
  1. N FDA,PSERR
  1. N PSICAB ; Pointer to cabinet in PADE INVENTORY SYSTEM "DEVICE" subfile (not to cabinet ien in DEVICE file #58.63)
  1. N PSDCAB ; Pointer to cabinet in PADE DISPENSING DEVICE (#58.63) file
  1. Q:'$G(PSJPSYS)
  1. Q:'$D(^PS(58.601,+$G(PSJPSYS),"DEVICE"))
  1. Q:($G(OFFON)'=1)&($G(OFFON)'=0) ; must be 1(yes=ACTIVE) or 0(no=INACTIVE)
  1. S PSICAB=0 F S PSICAB=$O(^PS(58.601,+$G(PSJPSYS),"DEVICE",PSICAB)) Q:'PSICAB D
  1. .S PSDCAB=+$G(^PS(58.601,PSJPSYS,"DEVICE",PSICAB,0))
  1. .Q:'$G(PSDCAB) Q:'$D(^PS(58.63,+PSDCAB,0)) ; Device not in device file #58.63
  1. .S PSVAL=$S(OFFON=1:"A",1:"I")
  1. .S FDA(58.63,PSDCAB_",",4)=PSVAL
  1. .D FILE^DIE("","FDA","PSERR")
  1. Q
  1. ;
  1. DEVSTCHK(PSJPSYS) ; Return status of all dispensing devices (cabinet) for system PSJPSYS
  1. ; If all devices have a status OFF, return 0; if ANY devices do NOT have a status of INACTIVE, return 1
  1. N DIE,DA,DR,X,Y,PSTATUS
  1. N PSICAB ; Pointer to cabinet in PADE INVENTORY SYSTEM "DEVICE" subfile (not to cabinet ien in DEVICE file #58.63)
  1. N PSDCAB ; Pointer to cabinet in PADE DISPENSING DEVICE (#58.63) file
  1. Q:'$G(PSJPSYS) 0
  1. Q:'$D(^PS(58.601,+$G(PSJPSYS),"DEVICE")) 0
  1. S PSTATUS=0
  1. S PSICAB=0 F S PSICAB=$O(^PS(58.601,+$G(PSJPSYS),"DEVICE",PSICAB)) Q:'PSICAB!$G(PSTATUS) D
  1. .S PSDCAB=+$G(^PS(58.601,PSJPSYS,"DEVICE",PSICAB,0))
  1. .Q:'$G(PSDCAB) Q:'$D(^PS(58.63,+PSDCAB,0)) ; Device not in device file #58.63
  1. .S PSTATUS=$P($G(^PS(58.63,+PSDCAB,0)),"^",4)
  1. .S PSTATUS=$S(PSTATUS="I":0,1:1)
  1. Q PSTATUS
  1. ;
  1. DELBADSY ; Check for and delete "?BAD" entries in PADE INVENTORY SYSTEM file (#58.601)
  1. ; "?BAD" entry may result when user enters "" new DISPENSING DEVICE (#58.63) file entry, and FileMan creates the "?BAD" KEY index
  1. N SYS,SYSNAM,BADSYS
  1. S SYS=0 F S SYS=$O(^PS(58.601,SYS)) Q:'SYS D
  1. .I $G(^PS(58.601,SYS,0))="?BAD",'$D(^PS(58.601,SYS,4)) S BADSYS(SYS)=$P($G(^PS(58.601,SYS,0)),"^")
  1. Q:'$D(BADSYS)
  1. S SYS=0 F S SYS=$O(BADSYS(SYS)) Q:'SYS D
  1. .Q:$G(BADSYS(SYS))'="?BAD"
  1. .N DIK,DA
  1. .S DIK="^PS(58.601,",DA=+SYS D ^DIK
  1. Q
  1. ;
  1. TSIGN(PADATA) ; Determine if the transaction amount needs to be added or subtracted, depending on the transaction type
  1. N TRNSIGN,II
  1. S TRNSIGN="" F II="V","B","U","E","D" I PADATA(5)=II S TRNSIGN="-"
  1. I PADATA(5)="A"&($E(PADATA(6))="-") S TRNSIGN="-" ; Discrepancies (type="A") may be either + or -
  1. Q $S(TRNSIGN="-":"-",1:"")
  1. ;
  1. DEVBAL(PADESYS,PADEDEV,DRUGIEN) ; Calculate Device BALANCE for PADE device=PADEDEV drug=DRUGIEN
  1. K DEVBAL S DEVBAL="" ; Initialize returned balance
  1. N DRAWER ; Pocket_subdrawer IEN
  1. N DRWOUT,DEVOUT ; Return array from LIST^DIC
  1. N DRWDRG
  1. N PSERR
  1. N DRWTOT
  1. ; We need system and device to find device balance
  1. I '$G(PADESYS)!'$G(PADEDEV) Q ""
  1. ;
  1. Q:'DRUGIEN ""
  1. S DRAWER=0 F S DRAWER=$O(^PS(58.601,PADESYS,"DEVICE",PADEDEV,"DRAWER",DRAWER)) Q:'DRAWER D
  1. .S DRWDRG=0 F S DRWDRG=$O(^PS(58.601,PADESYS,"DEVICE",PADEDEV,"DRAWER",DRAWER,"DRUG","B",DRWDRG)) Q:'DRWDRG D
  1. ..Q:DRWDRG'=DRUGIEN ; Is this the drug we're looking for?
  1. ..N DRWDRIEN ; The IEN of the drug's entry in the drawer
  1. ..S DRWDRIEN=$O(^PS(58.601,PADESYS,"DEVICE",PADEDEV,"DRAWER",DRAWER,"DRUG","B",DRWDRG,0))
  1. ..Q:'DRWDRIEN ; Bad index - this shouldn't happen
  1. ..S DRWTOT=$P($G(^PS(58.601,PADESYS,"DEVICE",PADEDEV,"DRAWER",DRAWER,"DRUG",DRWDRIEN,0)),"^",2)
  1. ..S DEVBAL=$G(DEVBAL)+DRWTOT
  1. Q DEVBAL