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

PSJPADIT.m

Go to the documentation of this file.
  1. PSJPADIT ;BIR/JCH-INPATIENT PADE INVENTORY FILE UTILITIES ;25 SEP 97 / 7:41 AM
  1. ;;5.0;INPATIENT MEDICATIONS ;**317,356**;16 DEC 97;Build 7
  1. ;Per VHA Directive 2004-038, this routine should not be modified.
  1. ;
  1. ; Reference to ^XLFDT is supported by DBIA 10103.
  1. ; Reference to ^PSDRUG is supported by DBIA 2192.
  1. ;
  1. FIL58601(PADATA,PSJOMS) ; File PADE data into PADE INVENTORY file #58.601
  1. ; PADE HL7 messages filed into the PADE IN TRANSACTION (#58.6) trigger new-style 'AC' action cross reference, entering here.
  1. ;
  1. ;INPUT:PADATA array - Passed in X(n) array from ACTION cross reference on PADE INBOUND TRANSACTIONS (#58.6) file.
  1. ; Array Node File# Field# Field Name Description
  1. ; ---------- ------ ------ ------------------ -------------
  1. ; PADATA(1) 58.6 1.1 PADE VENDOR IEN of PADE system from file 58.7
  1. ; PADATA(2) 58.6 1 DISPENSING DEVICE Name (text) of PADE DEVICE
  1. ; PADATA(3) 58.6 1.2 DRAWER Name (text) of PADE DRAWER
  1. ; PADATA(4) 58.6 2 DRUG Pointer to DRUG (#50) file.
  1. ; PADATA(5) 58.6 4 TYPE OF TRANSACTION Set of codes describing transaction (L=LOAD,U=UNLOAD,D=DISPENSE,R=RETURN,X=DESTROY).
  1. ; PADATA(6) 58.6 3 QUANTITY Quantity (item count) of drugs documented in transaction.
  1. ; PADATA(7) 58.6 10 POCKET Most specific storage location within drawer or subdrawer.
  1. ; PADATA(8) 58.6 13 ACTUAL BEGIN BALANCE Actual item count performed at PADE device prior to transaction.
  1. ; PADATA(9) 58.6 .01 TRANSACTION DATE/TIME Date/Time the activity occurred at the dispensing device
  1. ; PADATA(10) 58.6 11 SUBDRAWER Another storage division of a cabinet
  1. ; PADATA(12) 58.6 12 EXPECTED BEGIN COUNT Expected Quantity of Drug in Bin/Pocket at start of transaction
  1. ; PADATA(16) 58.6 16 POCKET BALANCE Item count of pocket/bin
  1. ;
  1. ;INPUT:PSJOMS array - Additional PADE HL7 information
  1. ; PSJOMS("DRGITM") - Drug ID
  1. ; PSJOMS("CABID") - PADE Cabinet ID
  1. ; PSJOMS("DISPSYS")- PADE System
  1. ;
  1. N ERRMSG,PADNOW,PSJNOTE
  1. Q:'$D(PADATA)>1 ; No data passed in
  1. ; Don't allow future Last Pocket Update date/times (could suppress actual updates)
  1. S PADNOW=$$NOW^XLFDT()
  1. I $G(PADATA(9))>PADNOW S PADATA(9)=PADNOW
  1. ;
  1. N INVDATA ; Array to hold data returned from GETS^DIQ calls (re-initialized and re-used)
  1. N ERR ; Array to hold messages returned from DIE and DIC calls. (re-initialized and re-used).
  1. N FDA ; Array containing the name of the root of a VA FileMan Data Array
  1. ;
  1. N PS586IEN S PS586IEN=+$G(DA) I PS586IEN I $P($G(^PS(58.6,PS586IEN,3)),"^")]"" S $P(^PS(58.6,PS586IEN,3),"^")="I"
  1. S PSJNOTE=$$UPPER^HLFNC($G(^PS(58.6,+$G(PS586IEN),2)))
  1. I PSJNOTE["CANCEL" Q ; Cancel Inventory Update if comments contain 'CANCEL'
  1. S PADATA(12)=$P($G(^PS(58.6,+$G(PS586IEN),0)),"^",13)
  1. S PADATA(16)=$P($G(^PS(58.6,+$G(PS586IEN),1)),"^",2)
  1. ;S PADATA(4)=$P($G(^PS(58.6,+$G(PS586IEN),0)),"^",3) ;UNCOMMENT THIS LINE IN TEST SYSTEM ONLY TO MOCK TEST CREATING AN INVENTORY UPDATE IN FILEMAN
  1. Q:$E($G(PADATA(5)))="W"&(PSJNOTE'["RETURN BIN") ; Waste Transaction should not update inventory, unless RETURN BIN
  1. ;
  1. ; Quit if this transaction is older than the most recent update date/time for the pocket-drug
  1. N TMPARRAY M PSTMPAR=PADATA
  1. I $$OLDPKUP^PSJPAD70(.PSTMPAR,.ERR,PS586IEN) D LOGERR(.ERR) Q
  1. K PSTMPAR
  1. ;
  1. ; File PADE System from PADE INBOUND TRANSACTION file to PADE INVENTORY file
  1. I '$$FILSYS(.PADATA,.ERR) S ERR="CANNOT FILE SYSTEM "_ERR D LOGERR(.ERR) Q
  1. ;
  1. ; File PADE Device from PADE INBOUND TRANSACTION file to PADE INVENTORY file
  1. I '$$FILDEV^PSJPADIU(.PADATA,.ERR) S ERR="PADE DEVICE NOT UPDATED "_ERR D LOGERR(.ERR) Q
  1. ;
  1. I ($TR(PADATA(3),"~")="")&($TR(PADATA(7),"~")="") Q ; No drawer, no pocket = no inventory update
  1. ;
  1. ; Add PADE Drawer from PADE INBOUND TRANSACTION file to PADE System Dispensing Device in PADE INVENTORY file
  1. I '$$FILDRWR(.PADATA,.ERR) S ERR="DRAWER NOT UPDATED "_ERR D LOGERR(.ERR) Q
  1. ;
  1. ; Add drug from PADE INBOUND TRANSACTION file to PADE System Dispensing Device in PADE INVENTORY file.
  1. I '$$FILDRUG(.PADATA,.ERR) S ERR="DRUG/DEVICE NOT UPDATED "_ERR D Q
  1. .Q:'$G(PADATA(4)) ; Consider drug 'NOT ON FILE' only if a valid VistA IEN (all numeric). Otherwise, the ID was never intended for VistA.
  1. .I $L($G(PSJOMS("DRGITM"))) Q:PSJOMS("DRGITM")'?1.N
  1. .S:$L($G(PSJOMS("CABID"))) ERR=ERR_":CABINET="_PSJOMS("CABID")
  1. .S:$L($G(PSJOMS("DISPSYS"))) ERR=ERR_":SYSTEM="_PSJOMS("DISPSYS")
  1. .D LOGERR(.ERR) Q
  1. ;
  1. ; Add drug from PADE INBOUND TRANSACTION file to Drug sub-file in Drawer multiple of PADE INVENTORY file
  1. I '$$DRGDRWR(.PADATA,.ERR) S ERR="DRUG/DRAWER NOT UPDATED "_ERR D LOGERR(.ERR) Q
  1. ;
  1. ; Add Pocket sub-file entry to Drawer multiple in PADE INVENTORY file
  1. I '$$UPCKDRW(.PADATA,.ERR) S ERR="POCKET NOT UPDATED "_ERR D LOGERR(.ERR) Q
  1. ;
  1. ; Update Pocket balance
  1. I '$$UPCKBAL(.PADATA,.ERR) S ERR="POCKET BALANCE NOT UPDATED "_ERR D LOGERR(.ERR)
  1. ; Update Drug (Drawer) balance in PADE INVENTORY file
  1. I '$$UPDRWBAL(.PADATA,.ERR) S ERR="DRUG/DRAWER BALANCE NOT UPDATED "_ERR D LOGERR(.ERR)
  1. ;
  1. I '($G(PSJNOTE)["PATIENT SPECIFIC BIN")&'($G(PSJNOTE)["RETURN BIN") D
  1. .; Update Drug (Device) balance in PADE INVENTORY file
  1. .I '$$UPDEVBAL(.PADATA,.ERR) S ERR="DRUG/DEVICE BALANCE NOT UPDATED "_ERR D LOGERR(.ERR)
  1. ;
  1. ; Delete (Unload) drug from device
  1. I $$DELCHK(.PADATA) D
  1. .N SYS,DEV,DRW,DRGDEV,DRG,PCK
  1. .S SYS=$G(PADATA("SYS IEN")) ; IEN of system in file 58.601
  1. .S DEV=$G(PADATA("DEVICE IEN")) ; IEN of device from subfile 58.6011
  1. .S DRW=$G(PADATA("DRAWER IEN")) ; IEN of drawer from subfile 58.60112
  1. .S DRGDEV=$G(PADATA("DRUG DEV IEN")) ; IEN of drug (device) from subfile 58.60111
  1. .S DRG=$G(PADATA("DRUG IEN")) ; IEN of drug (drawer) from subfile 58.601121
  1. .S PCK=$G(PADATA("POCK/SUB IEN")) ; IEN of pocket/subdrawer from subfile 58.601122
  1. .D UNLOAD^PSJPAD70(SYS,DEV,DRW,DRG,DRGDEV,PCK)
  1. ;
  1. ; Transaction processing complete
  1. I $G(PS586IEN) I $P($G(^PS(58.6,PS586IEN,3)),"^")]"" S $P(^PS(58.6,PS586IEN,3),"^")="C"
  1. Q
  1. ;
  1. DELCHK(PADATA) ; Check if incoming transaction represents a drug removed from the device
  1. N PSJTTRAN
  1. S PSJTTRAN=$G(PADATA(5)) I PSJTTRAN="U"!(PSJTTRAN="B") Q 1
  1. Q 0
  1. ;
  1. FILSYS(PADATA,ERRMSG) ; Check for PADE Inbound System in PADE INVENTORY file
  1. K DIERR,ERR S PADATA("SYS IEN")=$$FIND1^DIC(58.601,"","MXQ",$G(PADATA(1)),,,"ERR") K DIERR ;*356
  1. I '$G(PADATA("SYS IEN")) S ERRMSG="UNABLE TO FIND PADE SYSTEM "_PADATA(1) Q 0
  1. Q 1
  1. ;
  1. FILEDEV(XARRAY) ; File device from PADE DISPENSING DEVICE (#58.63) file
  1. N PADATA0
  1. I $G(XARRAY(2)) S PADATA("SYS IEN")=XARRAY(2)
  1. I '$G(XARRAY(2)),$G(XARRAY("SYS IEN"))]"" S PADATA(2)=$P($G(^PS(58.601,+XARRAY("SYS IEN"),0)),"^")
  1. I $G(XARRAY(1))]"" S PADATA(2)=XARRAY(1)
  1. D FILDEV^PSJPADIU(.PADATA)
  1. Q
  1. ;
  1. FILDRWR(PADATA,ERRMSG) ; Add PADE Drawer to PADE System's DISPENSING DEVICE in PADE INVENTORY file
  1. I $G(PADATA(3))="" S PADATA(3)="zz"
  1. K ERR,DIERR S PADATA("DRAWER IEN")=$$FIND1^DIC(58.60112,","_PADATA("DEVICE IEN")_","_PADATA("SYS IEN")_",","MX",PADATA(3),,,"ERR") K DIERR ;*356
  1. I '$G(PADATA("DRAWER IEN")) D
  1. .K FDA,ERR,DIERR S FDA(58.60112,"?+1,"_+PADATA("DEVICE IEN")_","_+PADATA("SYS IEN")_",",.01)=PADATA(3) D UPDATE^DIE("E","FDA","","ERR") K DIERR ;*356
  1. .K ERR,DIERR S PADATA("DRAWER IEN")=$$FIND1^DIC(58.60112,","_PADATA("DEVICE IEN")_","_PADATA("SYS IEN")_",","MX",PADATA(3),,,"ERR") K DIERR ;*356
  1. I '$G(PADATA("DRAWER IEN")) S ERRMSG="Unable to file PADE drawer"_PADATA(3) Q 0
  1. Q 1
  1. ;
  1. FILDRUG(PADATA,ERRMSG) ; Add drug from PADE INBOUND TRANSACTION file to PADE System Dispensing Device in PADE INVENTORY file
  1. N DRUG,DEVIEN,SYSIEN
  1. S DRUG=$G(PADATA(4)) ; Drug
  1. S DEVIEN=$G(PADATA("DEVICE IEN")) ; Dispensing Device IEN
  1. S SYSIEN=$G(PADATA("SYS IEN")) ; PADE System IEN
  1. I '(DRUG]"") S ERRMSG="MISSING DRUG" Q 0 ; No drug, no go
  1. ;
  1. I '$D(^PSDRUG(+DRUG,0)) D Q 0
  1. .N DRGNAME,DRGID,DRGNODE
  1. .S DRGNODE=$G(^PS(58.6,+$G(PS586IEN),1))
  1. .S DRGNAME=$P(DRGNODE,"^",6)
  1. .S DRGID=$P(DRGNODE,"^",7)
  1. .S ERRMSG="DRUG NOT ON FILE|" ; No LAYGO - Unknown DRUG (#50) file IEN
  1. .S ERRMSG=ERRMSG_"DRG ID="_DRGID_"|NAME="_DRGNAME
  1. ; Must have PADE system and Dispensing Device
  1. I '$G(DEVIEN) S ERRMSG="MISSING DEVICE IEN" Q 0
  1. I '$G(SYSIEN) S ERRMSG="MISSING SYSTEM IEN" Q 0
  1. N DA,FDA,X,Y,DIC,DIE,DR,D0,ERR,D,DD,DICR,DICRS,DO
  1. K ERR,DIERR S PADATA("DRUG DEV IEN")=$$FIND1^DIC(58.60111,","_DEVIEN_","_SYSIEN_",","MXQ",DRUG,,,"ERR") K DIERR ;*356
  1. I 'PADATA("DRUG DEV IEN") D
  1. .K ERR,DIERR S FDA(58.60111,"?+1,"_+DEVIEN_","_+SYSIEN_",",.01)=DRUG D UPDATE^DIE("E","FDA","ERR") K DIERR ;*356
  1. .K ERR,DIERR S PADATA("DRUG DEV IEN")=$$FIND1^DIC(58.60111,","_DEVIEN_","_SYSIEN_",","MXQ",DRUG,,,"ERR") K DIERR ;*356
  1. K ERR,DIERR S PADATA("DRUG DEV IEN")=$$FIND1^DIC(58.60111,","_DEVIEN_","_SYSIEN_",","MXQ",DRUG,,,"ERR") K DIERR ;*356
  1. I '$G(PADATA("DRUG DEV IEN")) S ERRMSG="UNABLE TO FILE DRUG "_DRUG Q 0
  1. Q 1
  1. ;
  1. DRGDRWR(PADATA,ERRMSG) ; Add drug to drawer in PADE INVENTORY file
  1. N FDA,ERR
  1. K ERR,DIERR S PADATA("DRUG IEN")=$$FIND1^DIC(58.601121,","_PADATA("DRAWER IEN")_","_PADATA("DEVICE IEN")_","_PADATA("SYS IEN")_",","MXQ",PADATA(4),,,"ERR") K DIERR ;*356
  1. I '$G(PADATA("DRUG IEN")) D
  1. .S FDA(58.601121,"?+1,"_PADATA("DRAWER IEN")_","_PADATA("DEVICE IEN")_","_PADATA("SYS IEN")_",",.01)=PADATA(4) K ERR,DIERR D UPDATE^DIE("","FDA","","ERR") K DIERR ;*356
  1. .K DIERR,ERR S PADATA("DRUG IEN")=$$FIND1^DIC(58.601121,","_PADATA("DRAWER IEN")_","_PADATA("DEVICE IEN")_","_PADATA("SYS IEN")_",","MXQ",PADATA(4),,,"ERR") K DIERR ;*356
  1. .Q:'PADATA("DRUG IEN") N DBALIENS,TRNSIGN,TRNSAMT
  1. .; If a new drug was added to drawer, initialize drug's drawer balance to Actual Begin Count (PADATA(8)) from HL7 message
  1. .S DBALIENS=PADATA("DRUG IEN")_","_PADATA("DRAWER IEN")_","_PADATA("DEVICE IEN")_","_PADATA("SYS IEN")_","
  1. .S FDA(58.601121,DBALIENS,1)=$G(PADATA(8))
  1. .; File the updated drawer total for this drug
  1. .K DIERR,ERR D FILE^DIE("","FDA","ERR") K DIERR ;*356
  1. I '$G(PADATA("DRUG IEN")) S ERRMSG="Unable to file PADE drug (drawer) IEN"_PADATA(4) Q 0
  1. Q 1
  1. ;
  1. UPDEVBAL(PADATA,ERRMSG) ; Update Drug (Device) balance
  1. ; Get current device total count of drug
  1. N DBALIENS,FDA,INVDATA,BALANCE,TRERR,DOSFORM
  1. ;
  1. I $E($G(PADATA(5)))="B" Q 1 ; "BIN" transaction does not update device balance
  1. I $E($G(PADATA(5)))="W" Q 1 ; "WASTE" transaction does not update device balance
  1. ;
  1. ; Get Device Balance from transaction, if sent
  1. S BALANCE=+$P($G(^PS(58.6,+$G(PS586IEN),1)),"^",5)
  1. S:BALANCE<0 BALANCE=0
  1. ;
  1. ; Done with 58.6, now set IENS to refer to 58.60111
  1. S DBALIENS=PADATA("DRUG DEV IEN")_","_PADATA("DEVICE IEN")_","_PADATA("SYS IEN")_","
  1. ;
  1. ; Reported Device Balance. Do this before Calculated Balance.
  1. ; File transaction's Device Balance for current device and drug to the Reported Device Balance
  1. N TRERR,FDA K DIERR S FDA(58.60111,DBALIENS,2)=BALANCE D FILE^DIE("","FDA","TRERR") K DIERR ;*356
  1. ;
  1. ; Add transaction input quantity to Drug's calculated Device balance
  1. N TRERR,FDA,DOSFORM
  1. ; Update Drug Dosage Form from transaction
  1. S DOSFORM=$P($G(^PS(58.6,+$G(PS586IEN),0)),"^",6)
  1. S FDA(58.60111,DBALIENS,1)=$$DEVBAL(PADATA("SYS IEN"),PADATA("DEVICE IEN"),PADATA(4))
  1. I DOSFORM]"" S FDA(58.60111,DBALIENS,4)=DOSFORM
  1. K DIERR,TRERR D FILE^DIE("","FDA","TRERR") K DIERR ;*356
  1. Q 1
  1. ;
  1. UPDRWBAL(PADATA,ERRMSG) ; Update Drug (Drawer) balance
  1. ; Get current drawer total count of drug
  1. N DBALIENS,INVDATA,FDA,BALANCE,II,PSYS,PDEV,PDRW,PDRG,POCK,PTOT,PNOD
  1. S PSYS=+$G(PADATA("SYS IEN")),PDEV=+$G(PADATA("DEVICE IEN")),PDRW=+$G(PADATA("DRAWER IEN")),PDRG=+$G(PADATA("DRUG IEN"))
  1. S (POCK,PTOT)=0 F S POCK=$O(^PS(58.601,PSYS,"DEVICE",PDEV,"DRAWER",PDRW,"SUB",POCK)) Q:'POCK S PNOD=^(POCK,0) D
  1. .Q:$P(PNOD,"^",5)'=$G(PADATA(4))
  1. .S PTOT=$G(PTOT)+$P(PNOD,"^",2)
  1. N ERR
  1. ; Add the updated pocket totals to the drawer total for this drug
  1. S DBALIENS=PDRG_","_PDRW_","_PDEV_","_PSYS_","
  1. S FDA(58.601121,DBALIENS,1)=PTOT
  1. ; File the updated drawer total for this drug
  1. K DIERR,ERR D FILE^DIE("","FDA","ERR") K DIERR ;*356
  1. Q 1
  1. ;
  1. UPCKDRW(PADATA,ERRMSG) ; Add pocket/subdrawer sub-file entry to Drawer multiple
  1. N FDA ; Fileman data array
  1. N ERR ; Fileman error message array
  1. N POCKSUB ; POCKET_SUBDRAWER concatenated
  1. N DRGIENS ; IEN string for Drug field
  1. N INVDATA ; Data returned from PADE INVENTORY (#58.601) file
  1. N DOSFORM ; Dose Form from HL7 message from PADE vendor
  1. N PADATA6 ; Signed value of inbound Quantity; positive for PADATA(5)=LOAD or RETURN, negative for PADATA(5)=DISPENSE/VEND/ISSUE and UNLOAD
  1. N PSPRVDT ; The last transaction date/time (date/time of the activity at the cabinet) this pocket was updated
  1. N PSPRVDIE ; The IEN of the last transaction date/time in the "PKUPDT" multiple
  1. ;
  1. S DOSFORM=$P($G(^PS(58.6,+$G(PS586IEN),0)),"^",6)
  1. S PADATA(10)=$TR(PADATA(10),"~~")_"~~"_+$G(PADATA(4)) ; Append subdrawer unique drug IEN suffix to handle different drugs in same subdr-pocket combo
  1. S:$G(PADATA(10))="" PADATA(10)=$P($G(^PS(58.6,+$G(PS586IEN),0)),"^",12) S:PADATA(10)="" PADATA(10)="~~"_+$G(PADATA(4))
  1. S POCKSUB=$G(PADATA(7))_"_"_$G(PADATA(10)) ; "POCKET_SUBDRAWER" storage location
  1. K ERR,DIERR S PADATA("POCK/SUB IEN")=$$FIND1^DIC(58.601122,","_PADATA("DRAWER IEN")_","_PADATA("DEVICE IEN")_","_PADATA("SYS IEN")_",","MX",POCKSUB,,,"ERR") K DIERR ;*356
  1. ; Get the last date/time this drawer/subdrawer~drug/pocket was updated
  1. S PSPRVDIE=$O(^PS(58.601,+$G(PADATA("SYS IEN")),"DEVICE",+$G(PADATA("DEVICE IEN")),"DRAWER",+$G(PADATA("DRAWER IEN")),"PKUPDT","B",POCKSUB,""))
  1. ;
  1. S PSPRVDT=$P($G(^PS(58.601,+$G(PADATA("SYS IEN")),"DEVICE",+$G(PADATA("DEVICE IEN")),"DRAWER",+$G(PADATA("DRAWER IEN")),"PKUPDT",+$G(PSPRVDIE),0)),"^",2)
  1. ; If this current update contains a transaction date/time (i.e., activity date/time) older than the last update, don't update inventory
  1. I $G(PSPRVDT)&$G(PADATA(9)) I PADATA(9)<PSPRVDT D Q 0
  1. .S ERRMSG="- OUTDATED TRANSACTION - "_$G(PADATA(1))_"."_$G(PADATA(2))_".DRUG="_$G(PADATA(4))_".POCKET="_$G(PADATA(7))
  1. .S ERRMSG=ERRMSG_".LAST UPDATED="_PSPRVDT_".TRANS DT="_PADATA(9)
  1. I 'PADATA("POCK/SUB IEN") D
  1. .S FDA(58.601122,"?+1,"_PADATA("DRAWER IEN")_","_PADATA("DEVICE IEN")_","_PADATA("SYS IEN")_",",.01)=POCKSUB K DIERR,ERR D UPDATE^DIE("","FDA","","ERR") K DIERR ;*356
  1. .K ERR,DIERR S PADATA("POCK/SUB IEN")=$$FIND1^DIC(58.601122,","_PADATA("DRAWER IEN")_","_PADATA("DEVICE IEN")_","_PADATA("SYS IEN")_",","MX",POCKSUB,,,"ERR") K DIERR ;*356
  1. I PADATA("POCK/SUB IEN") D ; File Pocket and Subdrawer references in the POCK/SUB sub-file to ensure distinguishing between the two
  1. .N PKSBIENS S PKSBIENS=PADATA("POCK/SUB IEN")_","_PADATA("DRAWER IEN")_","_PADATA("DEVICE IEN")_","_PADATA("SYS IEN")_","
  1. .S FDA(58.601122,PKSBIENS,1)=PADATA(4) ; DRUG
  1. .N PKBAL S PKBAL=PADATA(8)+PADATA(6) S FDA(58.601122,PKSBIENS,2)=$S(PKBAL<0:0,1:PKBAL) ; NEW BALANCE (BALANCE FORWARD)
  1. .S FDA(58.601122,PKSBIENS,3)=PADATA(7) ; POCKET
  1. .S FDA(58.601122,PKSBIENS,4)=PADATA(10) ; SUBDRAWER
  1. .I DOSFORM]"" S FDA(58.601122,PKSBIENS,5)=DOSFORM ; DRUG DOSE FORM
  1. .K ERR,DIERR D FILE^DIE("","FDA","ERR") K DIERR ;*356
  1. .I '$G(PSPRVDT),($G(POCKSUB)]"") D
  1. ..N FDA S FDA(58.601123,"?+1,"_PADATA("DRAWER IEN")_","_PADATA("DEVICE IEN")_","_PADATA("SYS IEN")_",",.01)=POCKSUB
  1. ..S FDA(58.601123,"?+1,"_PADATA("DRAWER IEN")_","_PADATA("DEVICE IEN")_","_PADATA("SYS IEN")_",",1)=PADATA(9)
  1. ..K DIERR,ERR D UPDATE^DIE("","FDA","","ERR") K DIERR ;*356
  1. .K DIERR,ERR S PSPRVDIE=$$FIND1^DIC(58.601123,","_PADATA("DRAWER IEN")_","_PADATA("DEVICE IEN")_","_PADATA("SYS IEN")_",","MX",POCKSUB,,,"ERR") K DIERR ;*356
  1. .I PSPRVDIE S DBALIENS=PSPRVDIE_","_PADATA("DRAWER IEN")_","_PADATA("DEVICE IEN")_","_PADATA("SYS IEN")_"," D
  1. ..I $G(PADATA(9))?7N.".".8N S FDA(58.601123,DBALIENS,1)=PADATA(9) ; TRANSACTION DATE/TIME
  1. ..Q:'$G(FDA(58.601123,DBALIENS,1))
  1. ..K DIERR,ERR D FILE^DIE("","FDA","ERR") K DIERR ;*356
  1. I 'PADATA("POCK/SUB IEN") S ERRMSG="Unable to file PADE pocket/subdrawer "_POCKSUB Q 0
  1. Q 1
  1. ;
  1. UPCKBAL(PADATA,ERRMSG) ; Update pocket / subdrawer balance
  1. ; Add transaction Quantity to Actual Begin Balance
  1. ;
  1. N PCK ; Pocket ID
  1. N PCKBEG ; Total of Actual Begin Balance
  1. N FDA ; Fileman data array
  1. N TRNSAMT ; Transaction amount
  1. N PCKTOT ; New balance of pocket
  1. N DRW ; Drawer ID
  1. N SUBDRW ; Subdrawer ID
  1. N DBALIENS ; IENS to System, Cabinet, Drawer, Drug, Pocket, Subdrawer
  1. ;
  1. S PCK=$G(PADATA(10))
  1. S TRNSAMT=$G(PADATA(6))
  1. S:$E(TRNSAMT)="-" TRNSAMT=+$P(TRNSAMT,"-",2)
  1. S TRNSAMT=$$TSIGN(.PADATA)_TRNSAMT
  1. S PCKBEG=$S($G(PADATA(8))&($G(PADATA(5))="C"):$G(PADATA(8)),1:$G(PADATA(12)))
  1. S PCKTOT=$S($E($G(PADATA(5)))="C":PCKBEG,1:PCKBEG+TRNSAMT)
  1. S PCKTOT=$S(PCKTOT<0:0,1:PCKTOT)
  1. S DRW=$G(PADATA(1.2))
  1. S SUBDRW=$G(PADATA(10))
  1. S DBALIENS=PADATA("POCK/SUB IEN")_","_PADATA("DRAWER IEN")_","_PADATA("DEVICE IEN")_","_PADATA("SYS IEN")_","
  1. S FDA(58.601122,DBALIENS,2)=PCKTOT
  1. ; File the updated drawer total for this drug
  1. K DIERR,ERR D FILE^DIE("","FDA","ERR") K DIERR ;*356
  1. Q 1
  1. ;
  1. LOGERR(ERRMSG) ; Log error ERRMSG
  1. D ERROR^PSJPAD7U(.ERRMSG)
  1. Q
  1. ;
  1. ORDIX(PS586IEN) ; Computed ORDER to handle blank orders in primary patient sort PADE cross reference - "zz" = patient transaction types without order
  1. N ORDER,RESULTS,RESULT
  1. K DIERR,ERROR D GETS^DIQ(58.6,PS586IEN_",","4;15","","RESULT","ERROR") K DIERR ;*356
  1. S ORDER=$G(RESULT(58.6,PS586IEN_",",15))
  1. Q:$G(ORDER) ORDER
  1. Q:(",LOAD,UNLOAD,"[(","_$G(RESULT(58.6,PS586IEN_",",4))_",")) "INVENTORY"
  1. Q "zz"
  1. ;
  1. DRWRBAL(PADESYS,PADEDEV,PADEDRWR,DRUGIEN) ; Calculate drawer balance for PADE device=PADEDEV, drawer=PADEDRWR, drug=DRUGIEN
  1. ; PADESYS = PADE vendor system IEN from file 58.601
  1. ; PADEDEV = PADE device IEN from file 58.601
  1. ; PADEDRWR = PADE drawer from file 58.601
  1. ; DRUGIEN = Drug IEN from file 58.601 (points to file 50)
  1. K DRWBAL S DRWBAL="" ; Initialize returned balance
  1. N SUBDRW ; Pocket_subdrawer IEN
  1. N OUT ; Return array from LIST^DIC
  1. ;
  1. Q:'$G(PADESYS)!'$G(PADEDEV)!'$G(PADEDRWR) "" ; We need system, device, and drawer to find a drawer balance
  1. Q:'DRUGIEN ""
  1. D LIST^DIC(58.601121,","_PADEDRWR_","_PADEDEV_","_PADESYS_",","1IE;2","","","","","","","","OUT","WTF")
  1. S SUBDRW=0 F S SUBDRW=$O(OUT("DILIST","ID",SUBDRW)) Q:'SUBDRW D
  1. .N DRUG S DRUG=$G(OUT("DILIST","ID",SUBDRW,1,"I")) I DRUG,(DRUG=DRUGIEN) S DRWBAL=DRWBAL+$G(OUT("DILIST","ID",SUBDRW,2))
  1. Q DRWBAL
  1. ;
  1. DEVBAL(PADESYS,PADEDEV,DRUGIEN) ; Calculate Device BALANCE for PADE device=PADEDEV drug=DRUGIEN
  1. Q $$DEVBAL^PSJPDRU1(PADESYS,PADEDEV,DRUGIEN)
  1. ;
  1. TSIGN(PADATA) ; Determine if the transaction amount needs to be added or subtracted, depending on the transaction type
  1. Q $$TSIGN^PSJPDRU1(.PADATA)