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

PSSDEEA.m

Go to the documentation of this file.
  1. PSSDEEA ;PBM/RMS - DRUG FILE ENTER/EDIT AUDIT ; 18 May 2018 10:55 AM
  1. ;;1.0;PHARMACY DATA MANAGEMENT;**227**;;Build 18
  1. ;------------------------------------------------------------------
  1. BEFORE(TAG) ;
  1. ; Capture the drug entry before it is edited to have to compare to
  1. ; after the user completes the editing. Email changes in
  1. ; linetag 'AFTER' (called at the end of PSSDEE).
  1. ; From: PSSDEE [PSS DRUG ENTER/EDIT]
  1. ; Output:
  1. ; 1. ^UTILITY(TAG,$J,DA)=Drug file entry number DA before editing
  1. ; 2. ZDA ; DA or IEN of Drug file #50 entry
  1. ; 3. ZN ; Will be equal to 1 if a new drug was entered into file
  1. ;
  1. ;ZEXCEPT: DA,Y,ZDA,ZN
  1. ;
  1. K ^UTILITY(TAG,$J,DA)
  1. M ^UTILITY(TAG,$J,DA)=^PSDRUG(DA)
  1. ;
  1. S ZDA=DA,ZN=$P(Y,"^",3)
  1. ;
  1. Q
  1. ;------------------------------------------------------------------
  1. AFTER(TAG) ;
  1. ;
  1. ; DOCUMENTATION AND SETUP INFORMATION
  1. ;
  1. ; Modifications:
  1. ;
  1. ; * PSSDEE calls BEFORE^PSSDEEA to create ^UTILITY("PSSDEE",$J,DA) data.
  1. ; ^UTILITY data holds all ^PSDRUG data for drug prior to any
  1. ; editing.
  1. ; * PSSDEE later calls AFTER^PSSDEEA to compare the value of the drug
  1. ; file entry after editing to the pre-snapshot values held in
  1. ; ^UTILITY. If changes have been made, a Mailman message is
  1. ; sent to members of a mail group. (See SETUP below)
  1. ;
  1. ; Note: USING the Drug Enter/Edit option is sufficient to trigger
  1. ; the audit email, even if a non-audited field is the only change
  1. ; made by the user.
  1. ;
  1. ; ZEXCEPT: PSSZMES,PSSZNOC,ANS,CHANGES,COUNT,FIELD,FLAG,LABEL,NEWVAL,OLDVAL,USER,ZDA,ZDAN,ZN,PSSZNODE,ZZJ
  1. EN Q:'$G(ZDA)
  1. N COUNT,USER S COUNT=6,USER=$P(^VA(200,DUZ,0),"^"),ZDAN=$P(^PSDRUG(ZDA,0),"^")
  1. D HEADER
  1. D COMPAR
  1. D SEND
  1. K PSSZMES,ZDA,ZDAN,LABEL,PSSZNODE,OLDVAL,NEWVAL,FIELD,CHANGES,FLAG,ZZJ,ANS,ZN,PSSZNOC
  1. S NEWVAL=""
  1. Q
  1. ; ZEXCEPT: PSSZMES,USER,ZDAN
  1. S PSSZMES(1)="Please Note: The Drug Enter/Edit option was used by "_USER_"."
  1. S PSSZMES(2)="The drug that was entered/edited was "_ZDAN_"."
  1. S PSSZMES(3)="-------------------------------------------------------------------------------"
  1. Q
  1. COMPAR ;
  1. ; ZEXCEPT: PSSZMES,ANS,FLAG,LABEL,NEWVAL,OLDVAL,ZDA,TAG,PSSZNOC
  1. N CHANGES,NEWVAL,OLDVAL,SPACES,PSSZNODE,ZZJ
  1. S $P(SPACES," ",80)="",PSSZNOC=0
  1. F PSSZNODE=0,2,3,8.5,660,660.1,"EPH","I","ND" I $G(ZDA) D
  1. .S:ZN=1 ^UTILITY(TAG,$J,ZDA,PSSZNODE)=""
  1. .Q:'$D(^PSDRUG(ZDA,PSSZNODE))&('$D(^UTILITY(TAG,$J,ZDA,PSSZNODE)))
  1. .I '$D(^UTILITY(TAG,$J,ZDA,PSSZNODE))&($D(^PSDRUG(ZDA,PSSZNODE))) S CHANGES(PSSZNODE)=^PSDRUG(ZDA,PSSZNODE)
  1. .I '$D(^PSDRUG(ZDA,PSSZNODE))&($D(^UTILITY(TAG,$J,ZDA,PSSZNODE))) S CHANGES(PSSZNODE)=^UTILITY(TAG,$J,ZDA,PSSZNODE)
  1. .Q:$D(CHANGES(PSSZNODE))!('$D(^PSDRUG(ZDA,PSSZNODE)))!('$D(^UTILITY(TAG,$J,ZDA,PSSZNODE)))
  1. .Q:^UTILITY(TAG,$J,ZDA,PSSZNODE)=^PSDRUG(ZDA,PSSZNODE)
  1. .S CHANGES(PSSZNODE)=""
  1. .F ZZJ=1:1:10 S FLAG=0,ANS="" S:$P(^PSDRUG(ZDA,PSSZNODE),"^",ZZJ)'=$P(^UTILITY(TAG,$J,ZDA,PSSZNODE),"^",ZZJ) ANS=$P(^UTILITY(TAG,$J,ZDA,PSSZNODE),"^",ZZJ),FLAG=1 S:FLAG=1&(ANS="") ANS="NULL" S CHANGES(PSSZNODE)=CHANGES(PSSZNODE)_ANS_"^"
  1. I '$D(CHANGES) S PSSZNOC=1,PSSZMES(4)=" *** No Audited Changes Made ***" Q
  1. S FLAG=0
  1. F PSSZNODE=0,2,3,8.5,660,660.1,"EPH","I","ND" S LABEL="SUB"_PSSZNODE I $D(CHANGES(PSSZNODE)) F ZZJ=1:1:11 Q:"^^^^^^^^^^^^^^^^^"[$P(CHANGES(PSSZNODE),"^",ZZJ,11) Q:$P(CHANGES(PSSZNODE),"^",ZZJ,11)="" D:'$D(^UTILITY(TAG,$J,ZDA)) SETLB Q:FLAG D
  1. .S OLDVAL=$P(CHANGES(PSSZNODE),"^",ZZJ) Q:OLDVAL="" S OLDVAL=OLDVAL_$$OLDEXT(OLDVAL,PSSZNODE,ZZJ)
  1. .S:$D(^PSDRUG(ZDA,PSSZNODE)) NEWVAL=$P(^PSDRUG(ZDA,PSSZNODE),"^",ZZJ)_$$NEWEXT(ZDA,PSSZNODE,ZZJ)
  1. .D STOR
  1. Q
  1. OLDEXT(OLDVAL,PSSZNODE,PIECE) ;COMPUTE EXTERNAL 'OLD' VALUE WHERE NECESSARY
  1. N FIELDNUM,FIELDTYP,PTRFILE
  1. S FIELDNUM=$O(^DD(50,"GL",PSSZNODE,PIECE,0))
  1. Q:'+FIELDNUM ""
  1. S FIELDTYP=$P(^DD(50,FIELDNUM,0),U,2)
  1. I $E(FIELDTYP)'="P" Q ""
  1. S PTRFILE=+$E(FIELDTYP,2,99)
  1. Q " ("_$$GET1^DIQ(PTRFILE,OLDVAL,.01)_")"
  1. NEWEXT(ZDA,PSSZNODE,PIECE) ;COMPUTE EXTERNAL 'NEW' VALUE WHERE NECESSARY
  1. N FIELDNUM,INTERNAL,EXTERNAL
  1. S FIELDNUM=$O(^DD(50,"GL",PSSZNODE,PIECE,0))
  1. Q:'+FIELDNUM ""
  1. S EXTERNAL=$$GET1^DIQ(50,ZDA,FIELDNUM)
  1. S INTERNAL=$$GET1^DIQ(50,ZDA,FIELDNUM,"I")
  1. Q:(INTERNAL=EXTERNAL) ""
  1. Q " ("_EXTERNAL_")"
  1. SEND ;
  1. ; ZEXCEPT: ZDA,ZDAN,PSSZNOC
  1. N XMDUZ,XMSUB,XMTEXT,XMY
  1. S XMSUB=$S(PSSZNOC:"DRUG ENTER/EDIT ACCESS (",1:"DRUG ENTER/EDIT AUDIT (")_$G(ZDA)_":"_$G(ZDAN)_")",XMDUZ=$S($G(DUZ):DUZ,1:.5)
  1. S XMTEXT="PSSZMES("
  1. S XMY("G.PSS DEE AUDIT")="",XMY(DUZ)=""
  1. D ^XMD
  1. Q
  1. STOR ;STORES VALUES INTO MAILMAN VARIABLES
  1. ; ZEXCEPT: PSSZMES,COUNT,FIELD,LABEL,NEWVAL,OLDVAL,SPACES
  1. S:LABEL["660.1" LABEL="SUB6601"
  1. S:LABEL["8.5" LABEL="SUB85"
  1. S FIELD=$P($T(@(LABEL)+ZZJ),";",3)
  1. ;S PSSZMES(COUNT)=FIELD_$E(SPACES,1,30-$L(FIELD))_OLDVAL_$E(SPACES,1,30-$L(OLDVAL))_$G(NEWVAL),COUNT=COUNT+1
  1. S PSSZMES(COUNT)=FIELD,COUNT=COUNT+1
  1. S PSSZMES(COUNT)=$E(SPACES,1,5)_"OLD: "_OLDVAL,COUNT=COUNT+1
  1. S PSSZMES(COUNT)=$E(SPACES,1,5)_"NEW: "_$G(NEWVAL),COUNT=COUNT+1
  1. S PSSZMES(COUNT)=" ",COUNT=COUNT+1
  1. Q
  1. SETLB ;SETS $TEXT LABEL
  1. ; ZEXCEPT: LABEL,PSSZNODE
  1. S LABEL=$S(PSSZNODE=0:"SUB0",PSSZNODE=2:"SUB2",PSSZNODE=3:"SUB3",PSSZNODE=8.5:"SUB85",PSSZNODE=660:"SUB660",PSSZNODE=660.1:"SUB6601",PSSZNODE="EPH":"SUBEPH",PSSZNODE="ND":"SUBND",1:"SUBI")
  1. Q
  1. SUB0 ;FIELDS FOR ^PSDRUG(ZDA,0)
  1. ;;GENERIC NAME
  1. ;;VA CLASSIFICATION
  1. ;;DEA, SPECIAL HDLG
  1. ;;MAXIMUM DOSE PER DAY
  1. ;;STANDARD SIG
  1. ;;FSN
  1. ;;DRUG GROUP/INTERACTION
  1. ;;WARNING LABEL
  1. ;;NON-FORMULARY
  1. ;;MESSAGE
  1. SUB2 ;FIELDS FOR ^PSDRUG(ZDA,2)
  1. ;;PHARMACY ORDERABLE ITEM
  1. ;;RESTRICTION
  1. ;;APPLICATION PACKAGES' USE
  1. ;;NDC
  1. ;;
  1. ;;*PRIMARY DRUG
  1. SUB3 ;FIELDS FOR ^PSDRUG(ZDA,3)
  1. ;;CMOP DISPENSE
  1. SUB85 ;
  1. ;;*ATC CANISTER
  1. ;;ATC MNEMONIC
  1. SUB660 ;FIELDS FOR ^PSDRUG(ZDA,660)
  1. ;;REORDER LEVEL
  1. ;;ORDER UNIT
  1. ;;PRICE PER ORDER UNIT
  1. ;;NORMAL AMOUNT TO ORDER
  1. ;;DISPENSE UNITS PER ORDER UNIT
  1. ;;PRICE PER DISPENSE UNIT
  1. ;;SOURCE OF SUPPLY
  1. ;;DISPENSE UNIT
  1. SUB6601 ;FIELDS FOR ^PSDRUG(ZDA,660.1)
  1. ;;CURRENT INVENTORY
  1. SUBEPH ;FIELDS FOR ^PSDRUG(ZDA,"EPH")
  1. ;;DAW CODE
  1. ;;NCPDP DISPENSE UNIT
  1. ;;NCPDP QUANTITY MULTIPLIER
  1. ;;EPHARMACY BILLABLE
  1. ;;EPHARMACY BILLABLE (TRICARE)
  1. ;;EPHARMACY BILLABLE (CHAMPVA)
  1. ;;SENSITIVE DIAGNOSIS DRUG
  1. SUBI ;FIELDS FOR ^PSDRUG(ZDA,"I")
  1. ;;INACTIVE DATE
  1. SUBND ;FIELDS FOR ^PSDRUG(ZDA,"ND")
  1. ;;NATIONAL DRUG FILE ENTRY
  1. ;;VA PRODUCT NAME
  1. ;;PSNDF VA PRODUCT NAME ENTRY
  1. ;;PACKAGE SIZE
  1. ;;PACKAGE TYPE
  1. ;;NATIONAL DRUG CLASS
  1. ;;
  1. ;;
  1. ;;
  1. ;;CMOP ID
  1. ;;NATIONAL FORMULARY INDICATOR