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

PSOERPC1.m

Go to the documentation of this file.
  1. PSOERPC1 ;BIRM/MFR - All Patients (Patient Centric) eRx Queue - Supporting APIs 1 ; 12/10/22 10:07am
  1. ;;7.0;OUTPATIENT PHARMACY;**700,750,746**;DEC 1997;Build 106
  1. ;
  1. HDR ; - Displays the Header Line
  1. N LINE1,LINE2,HDR,SRTORD,SRTPOS
  1. S LINE1="LOOK BACK DAYS: "_IOINHI_PSOLKBKD_IOINORM
  1. S $E(LINE1,40)="CS/NON-CS: "_IOINHI_$S(PSOCSERX="CS":"CS ONLY",PSOCSERX="Non-CS":"NON-CS ONLY",1:"BOTH")
  1. S:PSOCSERX'="Non-CS" LINE1=LINE1_" ("_$S(PSOCSSCH=1:"II",PSOCSSCH=2:"III-V",1:"II-V")_")"
  1. S LINE1=LINE1_IOINORM
  1. D INSTR^VALM1("MAX. QUEUE SIZE: "_IOINHI_$J(PSOMAXQS,4)_IOINORM,60,2)
  1. ;
  1. S LINE2="ERX STATUS: "_IOINHI
  1. I PSOSTFLT="A" S LINE2=LINE2_"ALL"
  1. I PSOSTFLT="N" S LINE2=LINE2_"NEW"
  1. I PSOSTFLT="I" S LINE2=LINE2_"IN PROGRESS"
  1. I PSOSTFLT="W" S LINE2=LINE2_"WAIT"
  1. I PSOSTFLT="H" S LINE2=LINE2_$S(PSOHDSTS="ALL":"HOLD (ALL)",1:"HOLD ("_PSOHDSTS_")")
  1. I PSOSTFLT="C" S LINE2=LINE2_$S(PSOCCRST="ALL":"CCR (ALL)",1:"CCR ("_PSOCCRST_")")
  1. S LINE2=LINE2_IOINORM
  1. S LINE3=""
  1. I $D(PATFLTR)!$G(DOBFLTR)!$G(MATFLTR) D
  1. . N FILTER S FILTER=""
  1. . I $G(MATFLTR) S FILTER=FILTER_"|MATCH("_$$MATCHLBL^PSOERPC2(MATFLTR)_")"
  1. . I $G(DOBFLTR) S FILTER=FILTER_"|DOB("_$$FMTE^XLFDT(DOBFLTR,"2Z")_")"
  1. . I $D(PATFLTR) S FILTER=FILTER_"|PATIENT("_$$EPATFLST^PSOERUT(53)_")"
  1. . S $E(FILTER,1)="" I $L(FILTER)>63 S FILTER=$E(FILTER,1,60)_"..."
  1. . S FILTER=FILTER
  1. . S LINE2="FILTERED BY: "_IOINHI_FILTER_IOINORM
  1. K VALMHDR S VALMHDR(1)=LINE1,VALMHDR(2)=LINE2
  1. ;
  1. S HDR="#",$E(HDR,5)="PATIENT",$E(HDR,30)="DOB",$E(HDR,41)="SSN",$E(HDR,54)="ED"
  1. S $E(HDR,58)="NW",$E(HDR,61)="WT",$E(HDR,64)="IP",$E(HDR,67)="HD",$E(HDR,70)="CCR"
  1. S $E(HDR,74)="OTH",$E(HDR,78)="TOT"
  1. D INSTR^VALM1(IORVON_HDR_IOINORM,1,4)
  1. S SRTORD=$S(PSORDER="A":"^",1:"v")
  1. S SRTPOS=$S(PSOSRTBY="PA":12,PSOSRTBY="DOB":33,PSOSRTBY="ED":56)
  1. D INSTR^VALM1(IOINHI_IORVON_SRTORD_IOINORM,SRTPOS,4)
  1. Q
  1. ;
  1. SETSORT ; - Set Patient List
  1. N EXPAT,MSGDT,ERXIEN,STSIEN,STSLST,ERXSTS,INST
  1. S PATCNT=0
  1. ; - Filter By eRx Patient is set
  1. I $D(PATFLTR) D Q
  1. . S ERXPAT="" F S ERXPAT=$O(PATFLTR(ERXPAT)) Q:'ERXPAT D I PATCNT'<PSOMAXQS Q
  1. . . I $G(DOBFLTR),'$D(^PS(52.46,"DOB",DOBFLTR,ERXPAT)) Q
  1. . . S MSGDT=$$FMADD^XLFDT(DT,-PSOLKBKD)-.1
  1. . . F S MSGDT=$O(^PS(52.49,"PAT2",ERXPAT,MSGDT)) Q:'MSGDT D I PATCNT'<PSOMAXQS Q
  1. . . . S ERXIEN=0 F S ERXIEN=$O(^PS(52.49,"PAT2",ERXPAT,MSGDT,ERXIEN)) Q:'ERXIEN D I PATCNT'<PSOMAXQS Q
  1. . . . . D SETPAT(ERXIEN,.PATCNT)
  1. ;
  1. ; - Filter By eRx Patient DOB is set
  1. I $G(DOBFLTR)'="" D Q
  1. . S ERXPAT=0 F S ERXPAT=$O(^PS(52.46,"DOB",DOBFLTR,ERXPAT)) Q:'ERXPAT D I PATCNT'<PSOMAXQS Q
  1. . . I $D(PATFLTR),'$D(PATFLTR(ERXPAT)) Q
  1. . . S MSGDT=$$FMADD^XLFDT(DT,-PSOLKBKD)-.1
  1. . . F S MSGDT=$O(^PS(52.49,"PAT2",ERXPAT,MSGDT)) Q:'MSGDT D I PATCNT'<PSOMAXQS Q
  1. . . . S ERXIEN=0 F S ERXIEN=$O(^PS(52.49,"PAT2",ERXPAT,MSGDT,ERXIEN)) Q:'ERXIEN D I PATCNT'<PSOMAXQS Q
  1. . . . . D SETPAT(ERXIEN,.PATCNT)
  1. ;
  1. ; - Specific Status(es) Selected
  1. I $G(PSOSTFLT)'="A" D Q
  1. . D LOADSTS(.STSLST)
  1. . I '$G(MBMSITE) D
  1. . . S ERXSTS=0 F S ERXSTS=$O(STSLST(ERXSTS)) Q:'ERXSTS D I PATCNT'<PSOMAXQS Q
  1. . . . S MSGDT=$$FMADD^XLFDT(DT,-PSOLKBKD)-.1
  1. . . . F S MSGDT=$O(^PS(52.49,"E",+$G(PSNPINST),ERXSTS,MSGDT)) Q:'MSGDT D I PATCNT'<PSOMAXQS Q
  1. . . . . S ERXIEN=0 F S ERXIEN=$O(^PS(52.49,"E",+$G(PSNPINST),ERXSTS,MSGDT,ERXIEN)) Q:'ERXIEN D I PATCNT'<PSOMAXQS Q
  1. . . . . . D SETPAT(ERXIEN,.PATCNT)
  1. . E D
  1. . . S MSGDT=$$FMADD^XLFDT(DT,-PSOLKBKD)-.1
  1. . . F S MSGDT=$O(^PS(52.49,"AMSGDTSTS",MSGDT)) Q:'MSGDT D I PATCNT'<PSOMAXQS Q
  1. . . . S ERXSTS=0 F S ERXSTS=$O(^PS(52.49,"AMSGDTSTS",MSGDT,ERXSTS)) Q:'ERXSTS D I PATCNT'<PSOMAXQS Q
  1. . . . . I '$D(STSLST(ERXSTS)) Q
  1. . . . . S ERXIEN=0 F S ERXIEN=$O(^PS(52.49,"AMSGDTSTS",MSGDT,ERXSTS,ERXIEN)) Q:'ERXIEN D I PATCNT'<PSOMAXQS Q
  1. . . . . . D SETPAT(ERXIEN,.PATCNT)
  1. ;
  1. ; - No Filters (Catch All)
  1. S MSGDT=$$FMADD^XLFDT(DT,-PSOLKBKD)-.1
  1. F S MSGDT=$O(^PS(52.49,"AMSGDTSTS",MSGDT)) Q:'MSGDT D I PATCNT'<PSOMAXQS Q
  1. . S ERXSTS=0 F S ERXSTS=$O(^PS(52.49,"AMSGDTSTS",MSGDT,ERXSTS)) Q:'ERXSTS D I PATCNT'<PSOMAXQS Q
  1. . . I '$$ELIGSTS("PC",$P($G(^PS(52.45,ERXSTS,0)),"^")) Q
  1. . . S ERXIEN=0 F S ERXIEN=$O(^PS(52.49,"AMSGDTSTS",MSGDT,ERXSTS,ERXIEN)) Q:'ERXIEN D I PATCNT'<PSOMAXQS Q
  1. . . . ; Related Institution Check (VAMCs only)
  1. . . . I '$G(MBMSITE),+$G(^PS(52.49,ERXIEN,24))'=PSNPINST Q
  1. . . . D SETPAT(ERXIEN,.PATCNT)
  1. Q
  1. ;
  1. SETPAT(ERXIEN,PATCNT) ; - Builds a sorted list of Patients
  1. ;Input: (r)ERXIEN - eRx IEN (Pointer to #52.49)
  1. ; (r)PATCNT - (by Ref) Counter for Patient (used to control the max number of patients in the list)
  1. N EPATIEN,PATNAME,ERXNODE0,ERXINST,DOB,ESCODE,MTYPE,DRGCSCH,PATSTATS,RCVDATE,Z,SORT,ED
  1. N VPATIEN,VPRVIEN,VDRGIEN,CSERX,ERXINST,EPTNODE0,EPTNODE1,EPTNODE2,GRP,SRT,SSN,STSIEN,ERXSTS
  1. ;
  1. S ERXNODE0=$G(^PS(52.49,ERXIEN,0))
  1. S STSIEN=+$G(^PS(52.49,ERXIEN,1)) I 'STSIEN Q
  1. S ERXSTS=$P($G(^PS(52.45,STSIEN,0)),"^")
  1. S EPATIEN=+$P(ERXNODE0,"^",4) I 'EPATIEN Q
  1. ; - Patient already on the list (or excluded by Basic Match filter)
  1. I $D(^TMP("PSOERPAT",$J,EPATIEN)) Q
  1. ;
  1. S MTYPE=$P(ERXNODE0,"^",8)
  1. S ERXINST=+$G(^PS(52.49,ERXIEN,24)),CSERX=+$G(^PS(52.49,ERXIEN,95))
  1. ; If the eRx is a new refill request and the status is refill request new, check for a response.
  1. ; If no response within 14 days, change to RRE (refill request expired)
  1. I MTYPE="RR",ERXSTS="RRN" D CHKEXP^PSOERX(ERXIEN,MTYPE)
  1. ; ChangeRequest messages will be checked for expiration status, but will not be displayed in the holding queue list view.
  1. I MTYPE="CR",ERXSTS="CRN" D CHKEXP^PSOERX(ERXIEN,MTYPE)
  1. ;
  1. ; - Related Institution Filter (Non-MbM sites only)
  1. I '$G(MBMSITE),PSNPINST'=ERXINST Q
  1. ;
  1. ; - Controlled Substance Prompts Filter
  1. I $G(PSOCSERX)="CS",'CSERX Q
  1. I $G(PSOCSERX)="Non-CS",CSERX Q
  1. I '$$CSFILTER^PSOERXUT(ERXIEN) Q
  1. ;
  1. ; - Match Status Filter
  1. I $G(MATFLTR),'$$MATCHFLT^PSOERPC2(MATFLTR,EPATIEN) S ^TMP("PSOERPAT",$J,EPATIEN)="" Q
  1. ;
  1. ; - Checking/Filtering Statuses
  1. I '$$ELIGSTS("PC",ERXSTS,MTYPE) Q
  1. ;
  1. S Z=$$PATSTATS(EPATIEN),SORT=EPATIEN
  1. S EPTNODE0=$G(^PS(52.46,EPATIEN,0)),EPTNODE1=$G(^PS(52.46,EPATIEN,1)),EPTNODE2=$G(^PS(52.46,EPATIEN,2))
  1. S PATNAME=$P(EPTNODE0,"^") S:PSOSRTBY="PA" SORT=PATNAME_" "_EPATIEN
  1. S DOB=$P(EPTNODE1,"^",4) S:PSOSRTBY="DOB" SORT=DOB_" "_EPATIEN
  1. S SSN=$P(EPTNODE2,"^",4)
  1. S:PSOSRTBY="ED" ED=+Z,SORT=$E(ED+10000,2,5)_" "_(1000000000-ERXIEN)
  1. S CSERX=+$P(Z,"^",8),CSGROUP=$S('PSOCSGRP:"ALL",CSERX:"CS",1:"NON-CS")
  1. S ^TMP("PSOERPCS",$J,CSGROUP,SORT)=PATNAME_"^"_$$FMTE^XLFDT(DOB,"5DZ")_"^"_SSN_"^"_Z
  1. S ^TMP("PSOERPCS",$J,CSGROUP,SORT,"PATIEN")=EPATIEN
  1. S ^TMP("PSOERPAT",$J,EPATIEN)=""
  1. S PATCNT=$G(PATCNT)+1
  1. Q
  1. ;
  1. PATSTATS(PATIEN) ; Set the Numbers (Stat Columns data) of eRx by Patient
  1. ; Input: PATIEN - eRx Patient IEN (Pointer to #52.46)
  1. ;Output: Patient Stats: P1: Highest Elapsed Days
  1. ; P2: Number of New eRx's
  1. ; P3: Number of eRx's on 'Wait' Status
  1. ; P4: Number of eRx's on 'In Progress' Statuses
  1. ; P5: Number of eRx's on 'On Hold' Statuses
  1. ; P6: Number of eRx's on 'CCR' Statuses
  1. ; P7: Number of eRx's on 'Other' Statuses
  1. ; P8: Number of CS eRx's
  1. N PATSTATS,MSGDT,ERXIEN,CSERX,STSIEN,EXTSTS
  1. I '$G(PSOLKBKD) S PSOLKBKD=$$GET1^DIQ(59,PSOSITE,10.2) S:'PSOLKBKD PSOLKBKD=365
  1. S MSGDT=$$FMADD^XLFDT(DT,-PSOLKBKD),PATSTATS=""
  1. F S MSGDT=$O(^PS(52.49,"PAT2",PATIEN,MSGDT)) Q:'MSGDT D
  1. . S ERXIEN=0 F S ERXIEN=$O(^PS(52.49,"PAT2",PATIEN,MSGDT,ERXIEN)) Q:'ERXIEN D
  1. . . S CSERX=+$G(^PS(52.49,ERXIEN,95))
  1. . . S MTYPE=$P($G(^PS(52.49,ERXIEN,0)),"^",8)
  1. . . ; eRx Status Check
  1. . . S STSIEN=+$G(^PS(52.49,ERXIEN,1)) I 'STSIEN Q
  1. . . S EXTSTS=$P($G(^PS(52.45,STSIEN,0)),"^")
  1. . . I '$$ELIGSTS("PC",EXTSTS,MTYPE) Q
  1. . . ; - CS/Non-CS Filter
  1. . . I $G(PSOCSERX)="Non-CS",CSERX Q
  1. . . I $G(PSOCSERX)="CS",'CSERX Q
  1. . . ; - Setting Largest Elapsed Days (1st piece)
  1. . . I $$FMDIFF^XLFDT(DT,MSGDT)>+PATSTATS D
  1. . . . S $P(PATSTATS,"^",1)=$$FMDIFF^XLFDT(DT,MSGDT)
  1. . . ; - Data for the eRx Count columns (New, In Progress, Wait, on Hold, CCR, Other)
  1. . . I EXTSTS="N" S $P(PATSTATS,U,2)=$P(PATSTATS,U,2)+1
  1. . . I ",W,RXW,CXW,"[(","_EXTSTS_",") S $P(PATSTATS,U,3)=$P(PATSTATS,U,3)+1
  1. . . I ",I,RXI,CXI,"[(","_EXTSTS_",") S $P(PATSTATS,U,4)=$P(PATSTATS,U,4)+1
  1. . . I $E(EXTSTS)="H" S $P(PATSTATS,U,5)=$P(PATSTATS,U,5)+1
  1. . . I ",RXN,RXE,RXR,RXD,RXF,CAO,CAR,CAH,CAP,CAX,CAF,CXD,CXN,CXV,CXY,CXE,"[(","_EXTSTS_",") D
  1. . . . S $P(PATSTATS,U,6)=$P(PATSTATS,U,6)+1
  1. . . I MTYPE="IE",",RRE,CRE,"[(","_EXTSTS_",") S $P(PATSTATS,U,7)=$P(PATSTATS,U,7)+1
  1. . . I $G(PSOCSERX)'="Non-CS",CSERX S $P(PATSTATS,U,8)=$P(PATSTATS,U,8)+1
  1. Q PATSTATS
  1. ;
  1. ELIGSTS(VIEW,ERXSTS,MSGTYPE) ; Checks whether the eRx's status is eligible to be on the list (counted)
  1. ; Input: VIEW - View: "PC" - Patient Centric View | "RX" - Rx Medication View
  1. ; ERXSTS - eRx Status (External format: e.g.,"N","HDI", "I", etc...)
  1. ; [o]MSGTYPE - Message Type ("N","RE","RR","CR", etc...)
  1. ;Output: 1 - eRx is eligible to be on the list | 0 - eRx is not Eligible to be on the list
  1. N STS,CCRSTS,SKIP
  1. S MSGTYPE=$G(MSGTYPE)
  1. ;
  1. ; If Any filter is selected, ignore the initial filter (upon entering the option)
  1. S STS=","_$S($E(ERXSTS)="H":$E(ERXSTS,1),$G(MBMSITE)&($E(ERXSTS,1,3)="REM"):"REM",1:ERXSTS)_","
  1. ; List is not Filtered
  1. I '$$FILTERED(VIEW),",RJ,RM,REM,PR,E,RXA,CXA,CAA,CXP,RXP,RXC,RRC,RXA,CAN,ICA,CNP,CRP,CRC,CXC,CNE,CRN,CRE,CRR,CRX,RRX,CXQ,RXA,"[STS Q 0
  1. I VIEW="PC",",RRE,RXI,RXW,RXR,RXE,RXN,RXD,RXF,CAH,CAO,CAP,CAR,CAX,CAF,CXD,CXN,CXV,CXY,CXE,CXI,CXW,CRE,N,I,W,H,"'[STS Q 0
  1. ; Match Status Filter (Only New, In Progress, Wait or Hold statuses are included)
  1. I $G(MATFLTR) I ",N,RXN,CXN,RXI,I,CXI,RXW,W,CXW,"'[STS Q 0
  1. ;
  1. ; Filter Inbound Error RRE and RenewalRequests For Patient Centric View
  1. I '$$FILTERED(VIEW) Q:((MSGTYPE="IE")&(ERXSTS'="RRE")&(ERXSTS'="CRE")) 0 Q:(MSGTYPE="RR") 0
  1. I VIEW="PC",'$$FILTERED(VIEW),MSGTYPE="RE","RXP,RXC,RXA,RRP,"[STS Q 0
  1. ;
  1. I '$G(STSFLTR),$G(MSTPFLTR)="",MSGTYPE="CR",ERXSTS="CRE" Q 0
  1. ;
  1. S SKIP=0
  1. I '$$FILTERED(VIEW) D I SKIP Q 0
  1. . I $G(PSOSTFLT)="N",",RXN,N,CXN,"'[STS S SKIP=1
  1. . I $G(PSOSTFLT)="I",",RXI,I,CXI,"'[STS S SKIP=1
  1. . I $G(PSOSTFLT)="W",",RXW,W,CXW,"'[STS S SKIP=1
  1. . I $G(PSOSTFLT)="C" D S SKIP=$S(PSOCCRST="ALL"&(CCRSTS[STS):0,PSOCCRST'="ALL"&(PSOCCRST=ERXSTS):0,1:1)
  1. . . S CCRSTS=",RXN,RXR,RXE,RXD,RXF,CAO,CAR,CAH,CAP,CAX,CAF,CXD,CXN,CXV,CXY,CXE,"
  1. . I $G(PSOSTFLT)="H" S SKIP=$S(PSOHDSTS="ALL"&(STS=",H,"):0,PSOHDSTS'="ALL"&(PSOHDSTS=ERXSTS):0,1:1)
  1. ; Default: Eligible
  1. Q 1
  1. ;
  1. FILTERED(VIEW) ; Return whether the list is being filtered or not
  1. ; Input: VIEW - View: "PC" - Patient Centric View | "RX" - Rx Medication View
  1. ;Output: 0 - No filters | 1 - Filters are in place
  1. I $G(VIEW)="PC",$D(PATFLTR)!$G(DOBFLTR)!$G(MATFLTR) Q 1
  1. I $G(VIEW)="RX",$D(PATFLTR)!$G(DOBFLTR)!$G(REDTFLTR)!$D(PRVFLTR)!$G(STSFLTR)!($G(DRGFLTR)'="")!($G(MSTPFLTR)'="")!$G(MATFLTR)!$G(PSOALLST) Q 1
  1. Q 0
  1. ;
  1. HLDSTS() ; - Prompt User for Hold eRx Status
  1. N Y,DIC,X,HLDSTS
  1. S DIC("A")="Select eRx Status: "
  1. S DIC=52.45,DIC(0)="AEQ",DIC("S")="I $D(^PS(52.45,""TYPE"",""ERX"",Y)),($E($P(^PS(52.45,Y,0),U))=""H"")"
  1. S DIC("W")="W "" - "",$P($G(^(0)),""^"",2)"
  1. W ! D ^DIC K DIC I X=U!($D(DUOUT))!(Y<1) Q ""
  1. S HLDSTS=$$UP^XLFSTR(X) I +HLDSTS S HLDSTS=$$GET1^DIQ(52.45,+HLDSTS,.01)
  1. Q HLDSTS
  1. ;
  1. CCRSTS(LST) ; - Prompt User for CCR eRx Status
  1. N I,DONE,DIC,Y,X,CODE,CARY,CIEN
  1. S DONE=0
  1. F I=1:1 D Q:DONE
  1. .S CODE=$P(LST,U,I) I CODE="" S DONE=1 Q
  1. .S CIEN=$$PRESOLV^PSOERXA1(CODE,"ERX")
  1. .S CARY(CIEN)=""
  1. S DIC("A")="Select eRx Status: "
  1. S DIC=52.45,DIC(0)="AEQ",DIC("S")="I $D(^PS(52.45,""TYPE"",""ERX"",Y)),$D(CARY(Y))"
  1. S DIC("W")="W "" - "",$P($G(^(0)),""^"",2)"
  1. W ! D ^DIC K DIC I X=U!($D(DUOUT))!(Y<1) Q ""
  1. Q X
  1. ;
  1. NEXTPAT(CURPTIEN) ; Returns the next Patient on the Queue to be worked on
  1. ; Input: (o)CURPTIEN - Current eRx Patient IEN (Pointer to #52.46) (If not passed, start with first patient)
  1. ;Output: NEXTPAT - Next eRx Patient on the Queue
  1. N NEXTPAT,STSLST,ERXSTS,STS,MSGDT,ERXIEN,EPATIEN,VPATIEN,VPRVIEN,VDRGIEN,ERXNODE0,ERXSTS,CSERX,LKBKDAYS,REACH
  1. K ^TMP("PSOERSKP",$J)
  1. D LOADSTS(.STSLST)
  1. S (NEXTPAT,INST)=0
  1. S LKBKDAYS=PSOLKBKD I PSOSTFLT="WP",$$GET1^DIQ(59,PSOSITE,10.2)>PSOLKBKD S LKBKDAYS=$$GET1^DIQ(59,PSOSITE,10.2)
  1. S MSGDT=$$FMADD^XLFDT(DT,-LKBKDAYS)-.1,REACH=$S($G(CURPTIEN):0,1:1)
  1. F S MSGDT=$O(^PS(52.49,"AMSGDTSTS",MSGDT)) Q:'MSGDT D I NEXTPAT Q
  1. . S ERXSTS=999999 F S ERXSTS=$O(^PS(52.49,"AMSGDTSTS",MSGDT,ERXSTS),-1) Q:'ERXSTS D I NEXTPAT Q
  1. . . ; eRx Status Check
  1. . . I '$D(STSLST(ERXSTS)) Q
  1. . . S ERXIEN=0 F S ERXIEN=$O(^PS(52.49,"AMSGDTSTS",MSGDT,ERXSTS,ERXIEN)) Q:'ERXIEN D I NEXTPAT Q
  1. . . . ; Related Institution Check
  1. . . . I '$G(MBMSITE),+$G(^PS(52.49,ERXIEN,24))'=$G(PSNPINST) Q
  1. . . . S ERXNODE0=$G(^PS(52.49,ERXIEN,0))
  1. . . . S EPATIEN=+$P(ERXNODE0,"^",4),VPATIEN=+$P(ERXNODE0,"^",5),CSERX=+$G(^PS(52.49,ERXIEN,95))
  1. . . . S VPRVIEN=+$P($G(^PS(52.49,ERXIEN,2)),"^",3),VDRGIEN=+$P($G(^PS(52.49,ERXIEN,3)),"^",2)
  1. . . . I $D(^TMP("PSOERSKP",$J,EPATIEN)) Q
  1. . . . I $G(CURPTIEN),EPATIEN=CURPTIEN S REACH=1 Q
  1. . . . I 'REACH S ^TMP("PSOERSKP",$J,EPATIEN)="" Q
  1. . . . ; - Match Status Filter
  1. . . . I $G(MATFLTR),'$$MATCHFLT^PSOERPC2(MATFLTR,EPATIEN) S ^TMP("PSOERSKP",$J,EPATIEN)="" Q
  1. . . . ; - CS/Non-CS Parameter Status Filter
  1. . . . I $G(PSOCSERX)="CS",'CSERX Q
  1. . . . I $G(PSOCSERX)="Non-CS",CSERX Q
  1. . . . I PSOSTFLT="WP",$D(^XUSEC("PSO ERX WORKLOAD TECH",DUZ)),$D(^XTMP("PSOERXWP",EPATIEN)),'$D(^XTMP("PSOERXWP",EPATIEN,DUZ)) Q
  1. . . . S NEXTPAT=EPATIEN
  1. K ^TMP("PSOERSKP",$J)
  1. I $G(CURPTIEN),'NEXTPAT,$$NEXTPAT(0)'=CURPTIEN S NEXTPAT=$$NEXTPAT(0)
  1. I PSOSTFLT="WP",NEXTPAT,$D(^XUSEC("PSO ERX WORKLOAD TECH",DUZ)) S ^XTMP("PSOERXWP",NEXTPAT,DUZ)=""
  1. Q NEXTPAT
  1. ;
  1. LOADSTS(STSLST) ; Load Status Filter Array based on the Filter selected
  1. ;Output: STSLST - Return Array passed in by Reference with status IEN as Index (e.g., ARRAY(124))
  1. N STS
  1. K STSLST
  1. S PSOSTFLT=$G(PSOSTFLT),PSOCCRST=$G(PSOCCRST),PSOHDSTS=$G(PSOHDSTS)
  1. I PSOSTFLT="A"!(PSOSTFLT="N") S STSLST($$STSIEN("N"))=""
  1. I PSOSTFLT="WP" F STS="N","I","W" S STSLST($$STSIEN(STS))=""
  1. I PSOSTFLT="A"!(PSOSTFLT="I") F STS="I","RXI","CXI" S STSLST($$STSIEN(STS))=""
  1. I PSOSTFLT="A"!(PSOSTFLT="W") F STS="W","RXW","CXW" S STSLST($$STSIEN(STS))=""
  1. I PSOSTFLT="A"!(PSOSTFLT="C") D
  1. . I PSOSTFLT="A"!(PSOCCRST="ALL") D
  1. . . F STS="RXN","RXR","RXE","RXD","RXF","CAO","CAR","CAH","CAP","CAX","CAF","CXD","CXN","CXV","CXY","CXE","RRE" D
  1. . . . S STSLST($$STSIEN(STS))=""
  1. . E I PSOCCRST'="" S STSLST($$STSIEN(PSOCCRST))=""
  1. I PSOSTFLT="A"!(PSOSTFLT="H") D
  1. . I PSOSTFLT="A"!(PSOHDSTS="ALL") D
  1. . . S STS="GZ" F S STS=$O(^PS(52.45,"B",STS)) Q:$E(STS)'="H"!(STS="") D
  1. . . . S STSLST($$STSIEN(STS))=""
  1. . E I PSOHDSTS'="" S STSLST($$STSIEN(PSOHDSTS))=""
  1. Q
  1. ;
  1. STSIEN(STS) ; Returns the eRx Status IEN
  1. ; Input: STS - eRx Status (external format, e.g., 'N', 'I', 'RXN', etc.)
  1. ;Output: ### - eRx Status IEN (internal format - pointer to #52.45)
  1. I $G(STS)="" Q 0
  1. Q +$O(^PS(52.45,"B",$G(STS),0))
  1. ;
  1. LOCK(PATIEN) ; Locks eRx Patient
  1. ; Input: PATIEN - eRx Patient IEN (Pointer to #52.46)
  1. ;Output: 1 - Patient Locked Successfully | Patient Not Locked (Already Locked)
  1. ; - Locking the eRx Patient
  1. N ERXLOCK
  1. S ERXLOCK=$$L^PSOERX1A(PATIEN,1,1)
  1. I 'ERXLOCK D Q 0
  1. . S VALMSG="Patient Locked"
  1. . I $G(^XTMP("PSOERXLOCK",PATIEN)) D
  1. . . S VALMSG=VALMSG_":"_$E($$GET1^DIQ(200,+$G(^XTMP("PSOERXLOCK",PATIEN)),.01),1,20)
  1. . . S VALMSG=VALMSG_"|"_$$FMTE^XLFDT($P($G(^XTMP("PSOERXLOCK",PATIEN)),"^",2),"2Z")
  1. Q 1