PSOERPC2 ;BIRM/MFR - All Patients (Patient Centric) eRx Queue - Supporting APIs 2 ;09/28/22
;;7.0;OUTPATIENT PHARMACY;**700**;DEC 1997;Build 261
;
MATCHLBL(MATCH) ; Match Filter Label
I MATCH=1 Q $S($G(MBMSITE):"PATIENT FAIL",1:"PATIENT NOT MATCHED")
I MATCH=2 Q $S($G(MBMSITE):"PROVIDER FAIL",1:"PROVIDER NOT MATCHED")
I MATCH=3 Q $S($G(MBMSITE):"DRUG FAIL",1:"DRUG NOT MATCHED")
I MATCH=4 Q $S($G(MBMSITE):"BASIC",1:"ALL MATCHED")
Q ""
;
REVLOCKS ; Review/Clean-up Locks
N ERXPATID,LKTOUT,DIE,DR
; TEMP CHANGE UNTIL MBM GETS OFF C3
I $G(MBMSITE) Q
S (ERXPATID,LKTOUT)=0 F S ERXPATID=$O(^XTMP("PSOERXLOCK",ERXPATID)) Q:'ERXPATID D
. L +^XTMP("PSOERXLOCK",ERXPATID):LKTOUT I '$T Q
. L -^XTMP("PSOERXLOCK",ERXPATID) K ^XTMP("PSOERXLOCK",ERXPATID)
. S DIE="^PS(52.46,",DR="6///@",DA=ERXPATID D ^DIE
Q
;
MATCHFLT(FILTER,ERXPAT) ; Check whether the patient qualifies for Match Filter
; Input: FILTER - Filter Value: 1 - Patient Fail | 2 - Provider Fail | 3 - Drug Fail | 4 - Basic (All matched) | 5 - All
; ERXPAT - eRx Patient IEN (Pointer to #52.46)
;Ouptut: 1 - Patient qualifies for Match Filter | 0 - Patient does not qualify
;
N MATCHFLT,RECDAT,ERXIEN,CSERX,MTYPE,ERXSTAT,VPATIEN,VPRVIEN,VDRGIEN,FOUNDONE,STATIEN
S FILTER=+$G(FILTER) I FILTER=5!'FILTER Q 1
S FOUNDONE=0,MATCHFLT=0
I FILTER=4 S MATCHFLT=1
S RECDAT=$$FMADD^XLFDT(DT,-PSOLKBKD)
F S RECDAT=$O(^PS(52.49,"PAT2",ERXPAT,RECDAT)) Q:'RECDAT D Q:(FILTER=4&'MATCHFLT) Q:(FILTER'=4&MATCHFLT)
. S ERXIEN=0 F S ERXIEN=$O(^PS(52.49,"PAT2",ERXPAT,RECDAT,ERXIEN)) Q:'ERXIEN D Q:(FILTER=4&'MATCHFLT) Q:(FILTER'=4&MATCHFLT)
. . S CSERX=+$G(^PS(52.49,ERXIEN,95))
. . S MTYPE=$P($G(^PS(52.49,ERXIEN,0)),"^",8)
. . S STATIEN=+$G(^PS(52.49,ERXIEN,1)),ERXSTAT=$P(^PS(52.45,STATIEN,0),"^")
. . ; Exclude eRx's on Hold
. . I $E(ERXSTAT,1)="H" Q
. . I '$$ELIGSTS^PSOERPC1("PC",ERXSTAT,MTYPE) Q
. . ; - CS/Non-CS Filter
. . I $G(PSOCSERX)="Non-CS",CSERX Q
. . I $G(PSOCSERX)="CS",'CSERX Q
. . ; - Match Status Filter
. . S VPATIEN=+$P($G(^PS(52.49,ERXIEN,0)),"^",5) ; Vista Patient
. . S VPRVIEN=+$P($G(^PS(52.49,ERXIEN,2)),"^",3) ; Vista Provider
. . S VDRGIEN=+$P($G(^PS(52.49,ERXIEN,3)),"^",2) ; Vista Drug
. . S FOUNDONE=1
. . I FILTER=1,'VPATIEN S MATCHFLT=1 Q
. . I FILTER=2,'VPRVIEN,'$$MATCHFLT(1,ERXPAT) S MATCHFLT=1 Q
. . I FILTER=3,'VDRGIEN,'$$MATCHFLT(1,ERXPAT),'$$MATCHFLT(2,ERXPAT) S MATCHFLT=1 Q
. . I FILTER=4,'VDRGIEN!'VPATIEN!'VPRVIEN S MATCHFLT=0 Q
I '$G(FOUNDONE) S MATCHFLT=0
;
Q MATCHFLT
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HPSOERPC2 2572 printed Apr 09, 2024@21:28:11 Page 2
PSOERPC2 ;BIRM/MFR - All Patients (Patient Centric) eRx Queue - Supporting APIs 2 ;09/28/22
+1 ;;7.0;OUTPATIENT PHARMACY;**700**;DEC 1997;Build 261
+2 ;
MATCHLBL(MATCH) ; Match Filter Label
+1 IF MATCH=1
QUIT $SELECT($GET(MBMSITE):"PATIENT FAIL",1:"PATIENT NOT MATCHED")
+2 IF MATCH=2
QUIT $SELECT($GET(MBMSITE):"PROVIDER FAIL",1:"PROVIDER NOT MATCHED")
+3 IF MATCH=3
QUIT $SELECT($GET(MBMSITE):"DRUG FAIL",1:"DRUG NOT MATCHED")
+4 IF MATCH=4
QUIT $SELECT($GET(MBMSITE):"BASIC",1:"ALL MATCHED")
+5 QUIT ""
+6 ;
REVLOCKS ; Review/Clean-up Locks
+1 NEW ERXPATID,LKTOUT,DIE,DR
+2 ; TEMP CHANGE UNTIL MBM GETS OFF C3
+3 IF $GET(MBMSITE)
QUIT
+4 SET (ERXPATID,LKTOUT)=0
FOR
SET ERXPATID=$ORDER(^XTMP("PSOERXLOCK",ERXPATID))
if 'ERXPATID
QUIT
Begin DoDot:1
+5 LOCK +^XTMP("PSOERXLOCK",ERXPATID):LKTOUT
IF '$TEST
QUIT
+6 LOCK -^XTMP("PSOERXLOCK",ERXPATID)
KILL ^XTMP("PSOERXLOCK",ERXPATID)
+7 SET DIE="^PS(52.46,"
SET DR="6///@"
SET DA=ERXPATID
DO ^DIE
End DoDot:1
+8 QUIT
+9 ;
MATCHFLT(FILTER,ERXPAT) ; Check whether the patient qualifies for Match Filter
+1 ; Input: FILTER - Filter Value: 1 - Patient Fail | 2 - Provider Fail | 3 - Drug Fail | 4 - Basic (All matched) | 5 - All
+2 ; ERXPAT - eRx Patient IEN (Pointer to #52.46)
+3 ;Ouptut: 1 - Patient qualifies for Match Filter | 0 - Patient does not qualify
+4 ;
+5 NEW MATCHFLT,RECDAT,ERXIEN,CSERX,MTYPE,ERXSTAT,VPATIEN,VPRVIEN,VDRGIEN,FOUNDONE,STATIEN
+6 SET FILTER=+$GET(FILTER)
IF FILTER=5!'FILTER
QUIT 1
+7 SET FOUNDONE=0
SET MATCHFLT=0
+8 IF FILTER=4
SET MATCHFLT=1
+9 SET RECDAT=$$FMADD^XLFDT(DT,-PSOLKBKD)
+10 FOR
SET RECDAT=$ORDER(^PS(52.49,"PAT2",ERXPAT,RECDAT))
if 'RECDAT
QUIT
Begin DoDot:1
+11 SET ERXIEN=0
FOR
SET ERXIEN=$ORDER(^PS(52.49,"PAT2",ERXPAT,RECDAT,ERXIEN))
if 'ERXIEN
QUIT
Begin DoDot:2
+12 SET CSERX=+$GET(^PS(52.49,ERXIEN,95))
+13 SET MTYPE=$PIECE($GET(^PS(52.49,ERXIEN,0)),"^",8)
+14 SET STATIEN=+$GET(^PS(52.49,ERXIEN,1))
SET ERXSTAT=$PIECE(^PS(52.45,STATIEN,0),"^")
+15 ; Exclude eRx's on Hold
+16 IF $EXTRACT(ERXSTAT,1)="H"
QUIT
+17 IF '$$ELIGSTS^PSOERPC1("PC",ERXSTAT,MTYPE)
QUIT
+18 ; - CS/Non-CS Filter
+19 IF $GET(PSOCSERX)="Non-CS"
IF CSERX
QUIT
+20 IF $GET(PSOCSERX)="CS"
IF 'CSERX
QUIT
+21 ; - Match Status Filter
+22 ; Vista Patient
SET VPATIEN=+$PIECE($GET(^PS(52.49,ERXIEN,0)),"^",5)
+23 ; Vista Provider
SET VPRVIEN=+$PIECE($GET(^PS(52.49,ERXIEN,2)),"^",3)
+24 ; Vista Drug
SET VDRGIEN=+$PIECE($GET(^PS(52.49,ERXIEN,3)),"^",2)
+25 SET FOUNDONE=1
+26 IF FILTER=1
IF 'VPATIEN
SET MATCHFLT=1
QUIT
+27 IF FILTER=2
IF 'VPRVIEN
IF '$$MATCHFLT(1,ERXPAT)
SET MATCHFLT=1
QUIT
+28 IF FILTER=3
IF 'VDRGIEN
IF '$$MATCHFLT(1,ERXPAT)
IF '$$MATCHFLT(2,ERXPAT)
SET MATCHFLT=1
QUIT
+29 IF FILTER=4
IF 'VDRGIEN!'VPATIEN!'VPRVIEN
SET MATCHFLT=0
QUIT
End DoDot:2
if (FILTER=4&'MATCHFLT)
QUIT
if (FILTER'=4&MATCHFLT)
QUIT
End DoDot:1
if (FILTER=4&'MATCHFLT)
QUIT
if (FILTER'=4&MATCHFLT)
QUIT
+30 IF '$GET(FOUNDONE)
SET MATCHFLT=0
+31 ;
+32 QUIT MATCHFLT