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

PSOERSE3.m

Go to the documentation of this file.
PSOERSE3 ;ALB/RM - PSO ERX SINGLE ERX DISPLAY INIT section continuation ;Jan 30, 2024@12:43:34
 ;;7.0;OUTPATIENT PHARMACY;**746,769,770**;DEC 16, 1997;Build 145
 ;
DISPRX ;continuation of PSOERSE2 routine
 N VADRGNME,ERXCOMM,VLOOP,SLOOP,VASIG,FSVPIN,COMARY,COM,FSSIG,VAPIARY,VASARY,DRMANVAL
 I "RR,CA,CN,IE"'[MTYPE!(MTYPE="N") D
 . I MTYPE="RE",$$GET1^DIQ(52.49,PSOIEN,52.1,"I")'="R" Q
 . S LINE=LINE+1 D SET^VALM10(LINE,"")
 . S PSNF="" I $G(VADRGIEN) S PSNF=$S($P(^PSDRUG(VADRGIEN,0),"^",9):"***(N/F)***",1:"") ;p689
 . S LINE=LINE+1
 . S VADRGNME=VADRG_" "_$P($$VADRSCH^PSOERXUT(VADRGIEN),"^",3)_PSNF
 . S DRMANVAL=$$GET1^DIQ(52.49,PSOIEN,1.5,"I")
 . D SET^VALM10(LINE,"Vista Drug"_$S($G(DRMANVAL):"[v]",1:"")_": "_VADRGNME)
 . D CNTRL^VALM10(LINE,$S($G(DRMANVAL):15,1:13),$L(VADRGNME),IOINHI,IOINORM)
 . D ADDITEM^PSOERX1A(.LINETXT,"Vista Qty: ",$G(VAQTY),1,25)
 . D ADDITEM^PSOERX1A(.LINETXT,"Vista Refills: ",$G(VAREF),27,18)
 . D ADDITEM^PSOERX1A(.LINETXT,"Vista Days Supply: ",$G(VADAYS),54,22)
 . S LINE=LINE+1 D SET^VALM10(LINE,LINETXT) S LINETXT=""
 . D CNTRL^VALM10(LINE,12,$L(VAQTY),IOINHI,IOINORM)
 . D CNTRL^VALM10(LINE,43,$L(VAREF),IOINHI,IOINORM)
 . D CNTRL^VALM10(LINE,74,$L(VADAYS),IOINHI,IOINORM)
 . S VASIG=""
 . S SLOOP=0 F  S SLOOP=$O(^PS(52.49,PSOIEN,"SIG",SLOOP)) Q:'SLOOP  D
 . . I '$L($G(VASIG)) S VASIG=$G(^PS(52.49,PSOIEN,"SIG",SLOOP,0)) Q
 . . S VASIG=$G(VASIG)_" "_$G(^PS(52.49,PSOIEN,"SIG",SLOOP,0))
 . D TXT2ARY^PSOERXD1(.VASARY,VASIG,,68)
 . S FSSIG=$O(VASARY(0))
 . S ERXDSUB=$$GET1^DIQ(52.49,PSOIEN,5.8,"I")
 . S ERXDSUB=$S(ERXDSUB=1:"NO",ERXDSUB=0:"YES",1:"")
 . S LINE=LINE+1 D SET^VALM10(LINE,"Substitutions?: "_ERXDSUB)
 . I ERXDSUB'="" D CNTRL^VALM10(LINE,17,$L(ERXDSUB),IOINHI,IOINORM)
 . S LINE=LINE+1 D SET^VALM10(LINE,"Vista Sig: "_$S(FSSIG:$G(VASARY(FSSIG)),1:""))
 . I +FSSIG>0 D CNTRL^VALM10(LINE,12,$L(VASARY(FSSIG)),IOINHI,IOINORM)
 . S SLOOP=1 F  S SLOOP=$O(VASARY(SLOOP)) Q:'SLOOP  D
 . . S LINE=LINE+1 D SET^VALM10(LINE,"           "_VASARY(SLOOP)),CNTRL^VALM10(LINE,12,$L(VASARY(SLOOP)),IOINHI,IOINORM)
 . S VPATINST=$$GET1^DIQ(52.49,PSOIEN,27,"E")
 . I VPATINST]"" S VPATINST=$$LSIG^PSOQUTIL(VPATINST)
 . D TXT2ARY^PSOERXD1(.VAPIARY,VPATINST," ",68)
 . S FSVPIN=$O(VAPIARY(0))
 . S LINE=LINE+1 D SET^VALM10(LINE," Pat Inst: "_$S(FSVPIN:$G(VAPIARY(FSVPIN)),1:""))
 . I +FSVPIN>0 D CNTRL^VALM10(LINE,12,$L(VAPIARY(FSVPIN)),IOINHI,IOINORM)
 . S VLOOP=1 F  S VLOOP=$O(VAPIARY(VLOOP)) Q:'VLOOP  D
 . . S LINE=LINE+1 D SET^VALM10(LINE,"           "_VAPIARY(VLOOP)),CNTRL^VALM10(LINE,12,$L(VAPIARY(VLOOP)),IOINHI,IOINORM)
 S ERXCOMM="eRx Notes: "_$$GET1^DIQ(52.49,PSOIEN,8,"E")
 D TXT2ARY^PSOERXD1(.COMARY,ERXCOMM," ",68)
 S COM=0 F  S COM=$O(COMARY(COM)) Q:'COM  D
 . S LINE=LINE+1 D SET^VALM10(LINE,$G(COMARY(COM)))
 . I COM=1 D CNTRL^VALM10(LINE,12,$L($G(COMARY(COM))),IOINHI,IOINORM) Q
 . D CNTRL^VALM10(LINE,1,$L($G(COMARY(COM))),IOINHI,IOINORM)
 I $$GET1^DIQ(52.49,PSOIEN,.05,"I") D
 . D ALG(.LINE)
 I '$G(S2017) D
 . D DIAG^PSOERXU1(PSOIEN,.LINE)
 I $G(S2017) D
 . D:MEDIEN DIAG2017^PSOERXU5(PSOIEN,.LINE,,MEDIEN)
 I $$GET1^DIQ(52.49,PSOIEN,95.1,"I") D
 . D DEANOTE^PSOERSE1(.LINE)  ; DEA Note for CS Digitally Signed eRx records
 Q
 ;
ALG(LINE) ;
 N ALGINFO,ALGLINE,DFN,IEN,XX,LDAT,GMRAL,PSONOAL,II,LDATA
 S ALGLINE=""
 S DFN=$$GET1^DIQ(52.49,PSOIEN,.05,"I")
 D EN1^GMRADPT
 S IEN=1
 I 'GMRAL D
 . S IEN=IEN+1,^TMP("PSOPI",$J,IEN,0)="Allergies: "_$S(GMRAL=0:"NKA",1:"")
 . I GMRAL'=0 S PSONOAL="" D ALLERGY^PSOORUT2 I PSONOAL'="" S ^TMP("PSOPI",$J,IEN,0)="Allergies: "_PSONOAL K PSONOAL
 . S IEN=IEN+1,^TMP("PSOPI",$J,IEN,0)=" "
 . D REMOTE^PSOORUT2
 . S IEN=IEN+1,^TMP("PSOPI",$J,IEN,0)="Adverse Reactions:"
 D:$G(GMRAL) ^PSOORUT3
 S XX=0 F  S XX=$O(^TMP("PSOPI",$J,XX)) Q:'XX  D
 . S LDAT=$G(^TMP("PSOPI",$J,XX,0))
 . I $G(LDAT)=" " Q
 . S LINE=LINE+1
 . D SET^VALM10(LINE,LDAT)
 . I $G(LDAT)["Allergies"!($G(LDAT)["Adverse Reactions") Q
 . S LDAT=$S(LDAT[":":$P(LDAT,":",2),1:LDAT)
 . D CNTRL^VALM10(LINE,15,$L(LDAT)+2,IOINHI,IOINORM)
 K ^TMP("PSOPI",$J)
 Q
 ;
DSPLYDUE(ERXIEN,LINE,DSPLYTO,TMPGBL) ;Display the Prescriber Drug Use Evaluation
 ;Inputs: (r) ERXIEN  - Pointer to the ERX HOLDING QUEUE file (#52.49)
 ;        (r) LINE    - List Manager line
 ;        (o) DSPLYTO - Vista=0 (default), CPRS=1
 ;        (o) TMPGBL  - The temporary global if the DUE is displayed in CPRS
 ;
 N PDRGDUE,PDUEHDR,DUECNT,COAGENT,REASON,RESULT,ACK,PDUETOTAL,DDOT
 I '+$G(DSPLYTO) S DSPLYTO=0
 D PDUEDATA^PSOERXU9(.PDRGDUE,ERXIEN,1) ;1 means to display the DUE in alphabetical order
 S PDUEHDR="Prescriber Drug Use Evaluation: "_$S('$D(PDRGDUE):"NONE",1:"")
 S LINE=LINE+1
 I '+$G(DSPLYTO) D SET^VALM10(LINE,PDUEHDR),CNTRL^VALM10(LINE,33,4,IOINHI,IOINORM)
 E  S @TMPGBL@(LINE,0)=PDUEHDR
 ;
 I $D(PDRGDUE) D
 . S PDUETOTAL=$O(PDRGDUE(""),-1)
 . S $P(DDOT,".",81)=""
 . S DUECNT=0 F  S DUECNT=$O(PDRGDUE(DUECNT)) Q:'DUECNT  D
 . . K COAGENT,REASON,RESULT,ACK
 . . S COAGENT="Co-Agent: "_$P(PDRGDUE(DUECNT),"^",8)
 . . S REASON=$P(PDRGDUE(DUECNT),"^",2) I $$PRESOLV^PSOERXA1(REASON,"REA") S REASON=$$GET1^DIQ(52.45,$$PRESOLV^PSOERXA1(REASON,"REA"),.02)
 . . S REASON="Reason: "_REASON
 . . S RESULT=$P(PDRGDUE(DUECNT),"^",4) I $$PRESOLV^PSOERXA1(RESULT,"RES") S RESULT=$$GET1^DIQ(52.45,$$PRESOLV^PSOERXA1(RESULT,"RES"),.02)
 . . S RESULT="Result: "_RESULT
 . . S ACK="Override: "_$P(PDRGDUE(DUECNT),"^",9)
 . . ;
 . . I '+$G(DSPLYTO) D  Q  ;display the DUE in Vista
 . . . S LINE=LINE+1 D SET^VALM10(LINE,COAGENT),CNTRL^VALM10(LINE,11,$L(COAGENT)+1,IOINHI,IOINORM)
 . . . S LINE=LINE+1 D SET^VALM10(LINE,REASON),CNTRL^VALM10(LINE,9,$L(REASON)+1,IOINHI,IOINORM)
 . . . S LINE=LINE+1 D SET^VALM10(LINE,RESULT),CNTRL^VALM10(LINE,9,$L(RESULT)+1,IOINHI,IOINORM)
 . . . S LINE=LINE+1 D SET^VALM10(LINE,ACK),CNTRL^VALM10(LINE,11,$L(ACK)+1,IOINHI,IOINORM)
 . . . I DUECNT'=+$G(PDUETOTAL) S LINE=LINE+1 D SET^VALM10(LINE,DDOT)
 . . ;
 . . ;display the DUE in CPRS Addendum
 . . S LINE=LINE+1 S @TMPGBL@(LINE,0)=COAGENT
 . . S LINE=LINE+1 S @TMPGBL@(LINE,0)=REASON
 . . S LINE=LINE+1 S @TMPGBL@(LINE,0)=RESULT
 . . S LINE=LINE+1 S @TMPGBL@(LINE,0)=ACK
 . . I DUECNT'=+$G(PDUETOTAL) S LINE=LINE+1,@TMPGBL@(LINE,0)=DDOT
 I +$G(DSPLYTO)=1 S LINE=LINE+1,@TMPGBL@(LINE,0)=""
 Q
 ;
ACCEPT ; Validate All Matches (Patient/Provider/Drug) & Accept eRx
 N PASSTRHU,ERXSTS,DIR D FULL^VALM1 S VALMBCK="R"
 S PASSTRHU=0 I $$GET1^DIQ(52.49,ERXIEN,.08,"I")="RE",$$GET1^DIQ(52.49,ERXIEN,52.1,"I")'="R" S PASSTRHU=1
 S ERXSTS=$$GET1^DIQ(52.49,ERXIEN,1)
 I ERXSTS="RJ"!(ERXSTS="RM")!($E(ERXSTS,1,3)="REM")!(ERXSTS="PR")!(ERXSTS="CXP")!(ERXSTS="RXP") D  Q
 . W !!,"Cannot accept a prescription with a status of 'Rejected', 'Removed',",!,"or 'Processed",!
 . K DIR S DIR(0)="E" D ^DIR
 ; MbM site won't validate the patient
 I 'PASSTRHU D
 . I 'PASSTRHU,'$$GET1^DIQ(52.49,ERXIEN,1.7,"I") D
 . . I '$G(MBMSITE) W !!,"Validating Patient..." D ACVAL^PSOERX1B(ERXIEN,"P",1)
 . . I $G(MBMSITE) W !!,"Patient has not been validated!",!,$C(7) K DIR S DIR(0)="E" D ^DIR
 . I '$$GET1^DIQ(52.49,ERXIEN,1.3,"I") D
 . . W !!,"Validating Provider..." D ACVAL^PSOERX1B(ERXIEN,"PR",1)
 . I '$$GET1^DIQ(52.49,ERXIEN,1.5,"I") D
 . . W !!,"Validating Drug/SIG..." D ACVAL^PSOERX1B(ERXIEN,"D",1)
 ;
 I PASSTRHU!($$GET1^DIQ(52.49,ERXIEN,1.7,"I")&$$GET1^DIQ(52.49,ERXIEN,1.3,"I")&$$GET1^DIQ(52.49,ERXIEN,1.5,"I")) D
 . N DIR,PSOIEN
 . ;Accepting the eRx
 . S PSOIEN=ERXIEN D SETUP^PSOERX1F
 E  D:$G(MBMSITE) REF^PSOERSE1 Q
 S VALMBCK="Q" I $G(MBMSITE) D REF^PSOERSE1
 Q
 ;
NEXTDRUG  ; Automatically Selects the Next Drug
 N NEXTERX,FROMLIST
 ;
 I '$G(EPATIEN) S EPATIEN=$$GET1^DIQ(52.49,+$G(PSOIEN),.04,"I") I 'EPATIEN Q
 S FROMLIST='$G(PSOIEN),VALMBCK="Q"
 ; - Locking the eRx Patient
 S NEXTERX=$$NEXTERX^PSOERSE3(EPATIEN,+$G(PSOIEN))
 I 'NEXTERX S NEXTERX=$$NEXTERX^PSOERSE3(EPATIEN,0) I 'NEXTERX Q
 S (ERXIEN,PSOIEN)=NEXTERX
 I $G(PRINTFLG)'="VD" D EN^PSOERXD1
 E  D INIT^PSOERXD1,HDR^PSOERXD1 S VALMBCK="R" Q
 I FROMLIST D EN^PSOERSE1(PSOIEN)
 E  D INIT^PSOERSE1,HDR^PSOERSE1
 I FROMLIST K PSOIEN
 Q
 ;
NEXTERX(ERXPAT,ERXIEN) ; Returns the next Actionable eRx for the Patient 
 ; Input:(r) ERXPAT - Pointer to the ERX EXTERNAL PATIENT file (#52.46)
 ;       (r) ERXIEN - Current eRx - Pointer to the ERX HOLDING QUEUE file (#52.49)
 ;Output: NEXTERX   - Next eRx for the eRx Patient
 N NEXTERX,ERX,BEGDATE,ENDDATE,MSGDT,STATUS
 S (NEXTERX,ERX)=0,BEGDATE=$$FMADD^XLFDT(DT,-PSOLKBKD)-.1,ENDDATE=DT+.99,MSGDT=BEGDATE
 F  S MSGDT=$O(^PS(52.49,"PAT2",ERXPAT,MSGDT)) Q:'MSGDT!(MSGDT>ENDDATE)  D  I NEXTERX Q
 . F  S ERX=$O(^PS(52.49,"PAT2",ERXPAT,MSGDT,ERX)) Q:'ERX  D  I NEXTERX Q
 . . I ERX'>ERXIEN Q
 . . S STATUS=$$GET1^DIQ(52.49,ERX,1)
 . . I $F(",RJ,RM,REM,PR,E,RXA,CXA,CAA,CAN,CXP,RXP,RXA,ICA,CNP,CRP,CRC,RRC,CXC,CNE,CRN,CRR,CRX,CXQ,RXA,RXC,RRN,RRX,RRR,RRP,IRA,",","_$E(STATUS,1,3)_",") Q
 . . S NEXTERX=ERX
 Q NEXTERX
 ;
EDITDRUG ; Edit Drug fields from Single eRx View/Display
 N Y,CURPAGE,XQORM
 S VALMBCK="R",CURPAGE=VALMBG
 S Y=$P(XQORNOD(0),"=",2) I Y']"" Q
 ;
 I +Y'=1,'$$GET1^DIQ(52.49,PSOIEN,3.2,"I")!'$D(^PS(52.49,PSOIEN,21)) D  S VALMBCK="R" Q
 . S VALMSG="You must update the Dispense Drug first!" W $C(7)
 ;
 D EDIT^PSOERX1A("D",Y)
 D REF^PSOERSE1 S VALMBG=+$G(CURPAGE)
 Q
 ;
MISSINGPI(ERXIEN) ; Returns whether it is likely the eRx should have Patient Instructions entered or not
 ; Input: (r) ERXIEN  - Pointer to the ERX HOLDING QUEUE file (#52.49)
 ;Output: MISSINGPI   - 0: Pat.Instr. not likely missing | 1: Pat.Instr. is likely missing
 ;
 N SUGRXIEN,MSGTYPE
 I '$D(^PS(52.49,+$G(ERXIEN),0)) Q 0
 I $$GET1^DIQ(52.49,ERXIEN,1.4,"I")'=1 Q 0   ; Not auto-matched
 I '$F(",N,RE,",","_$E($$GET1^DIQ(52.49,ERXIEN,.08,"I"))_",") Q 0
 I '$F(",I,N,W,H,",","_$E($$GET1^DIQ(52.49,ERXIEN,1,"E"))_",") Q 0
 I $$GET1^DIQ(52.49,ERXIEN,27)'="" Q 0
 S SUGRXIEN=$$GET1^DIQ(52.49,ERXIEN,.15,"I") I 'SUGRXIEN Q 0
 I $$VARXPI^PSOERUT(SUGRXIEN)="" Q 0
 Q 1