PXRMXX ; SLC/PJH - Extract Patient sample;07/29/2004
;;2.0;CLINICAL REMINDERS;;Feb 04, 2005
;
;Update ^TMP - all patients with encounters
;------------------------------------------
TMP S ^TMP(NODE,$J,"TEMP",DFN)="" Q
;
;Save individual encounter into FIND1
;------------------------------------
SAV S FCNT=FCNT+1,FOUND=1 M FIND1(FCNT)=FIND(ENC) Q
;
;Check if finding is in date range
;---------------------------------
DCHK(DNODE) ;
N DATE,LTERM,LTRAN,TNAM,SNUM,TERMNAM,TERMNAT
S DATE=$G(FIND(ENC,DNODE)) Q:DATE=""
;
I (DATE<BD)!(DATE>ED) Q
;Lab transforms
I REM(PXRMITEM)="VA-NATIONAL EPI LAB EXTRACT" D Q:LTRAN
.S LTRAN=0 D:$P(FIND(ENC,"FINDING"),";",2)="LAB(60," LTRAN
;National DB term mapping
S TERMNAM=$P($G(FIND(ENC,"TERM")),U)
;If term exists check if it needs re-mapping for this reminder
I TERMNAM]"" D
.;Get the alternate name from the REM array
.S TERMNAT=$G(REM(PXRMITEM,TERMNAM)) Q:TERMNAT=""
.;National database code
.S FIND(ENC,"ALTTRM")=TERMNAT
;Set source number code
S SNUM=""
I $G(FIND(ENC,"FILE NUMBER"))=9000011 S SNUM=1
I $G(FIND(ENC,"FILE NUMBER"))=9000010.07 S SNUM=2
I $G(FIND(ENC,"FILE NUMBER"))=45 S SNUM=3
S FIND(ENC,"S/N")=SNUM
;
;Save encounter
D SAV
Q
;
;Check for findings
;------------------
FCHEK(PXRMITEM) ;
N ECNT,EDATE,ENC,LDONE,FOUND
;Get reminder name
S PXRMNAM=$P($G(^PXD(811.9,PXRMITEM,0)),U)
;Check each encounter
S ENC=0,ECNT=0,FOUND=0,LDONE=0
F S ENC=$O(FIND(ENC)) Q:'ENC D
.;Ignore medications - these are loaded from pharmacy
.I $D(FIND(ENC,"DRUG")) Q
.;Check if finding is in date range
.I $D(FIND(ENC,"FINDING")) D DCHK("DATE")
;
Q
;
;Update ^TMP - all patients with findings
;----------------------------------------
FSAVE N CNT,FIEN,FCNT,FUNIQ,FREC
N VDATA,VDATE,VFOUND,VLAST,VIEN,VLTYP,VOK,VSERV,VTYP
;Extract the visit date and type from visit record
S CNT=0,FUNIQ=0,VLAST=0,VFOUND=0,VLTYP=""
F S CNT=$O(FIND1(CNT)) Q:'CNT D
.S VOK=0
.I $D(FIND1(CNT,"VIEN")) D
..S VIEN=$G(FIND1(CNT,"VIEN")) Q:'VIEN
..S VDATA=$G(^AUPNVSIT(VIEN,0)) Q:VDATA=""
..;Get visit date and service from visit record
..S VDATE=$P(VDATA,U),VSERV=$P(VDATA,U,7),VFOUND=1,VOK=1,VTYP="O"
..;Calculate visit type from sevice
..I (VSERV="D")!(VSERV="H")!(VSERV="I") S VTYP="I"
.;If no visit info default to finding date
.I 'VOK S VDATE=$G(FIND1(CNT,"DATE")),VTYP="O" D
..N VAIN,VAINDT S VAINDT=VDATE D INP^VADPT
..I $G(VAIN(7))'="" S VTYP="I"
.;Save encounter/finding date and type
.S FIND1(CNT)=VDATE_U_VTYP
.;Save count by finding for report
.S FIEN=$G(FIND1(CNT,"FINDING")) I FIEN="" S FIEN="NO FINDING"
.S FREC=$G(PXRMFIEN(FIEN)),FCNT=$P(FREC,U),FUNIQ=$P(FREC,U,2)
.S FCNT=FCNT+1 I '$G(FUNIQ(FIEN)) S FUNIQ=FUNIQ+1
.S PXRMFIEN(FIEN)=FCNT_U_FUNIQ,FUNIQ(FIEN)=1
.;Save most recent
.I VDATE>VLAST S VLAST=VDATE,VLTYP=VTYP
;
;Save patient
S ^TMP(NODE,$J,DFN)=VLAST_U_VLTYP
;Save findings
M ^TMP(NODE,$J,DFN,"FIND")=FIND1
;
Q
;
;Check each patient for findings
;-------------------------------
FIND N BD,DFN,ED,LAB,LABN,PXRMITEM,PXRMNAM,OR,REM,SAVE,SEARCH
;
;Build array of reminders and terms to be re-mapped
;
;This requires that LAB(69.51) is created to include a list of IEN's
;
S PXRMITEM=0
F S PXRMITEM=$O(^LAB(69.51,"B",PXRMITEM)) Q:'PXRMITEM D
.S PXRMNAM=$P($G(^PXD(811.9,PXRMITEM,0)),U)
.I PXRMNAM'="VA-NATIONAL EPI RX EXTRACT" S REM(PXRMITEM)=PXRMNAM
.;Get finding list for these reminders and medication list
.D REM^PXRMXX1(PXRMITEM,.SEARCH,.LAB)
.;Hep A,B,C lab tests
.S LABN("HEP C VIRUS ANTIBODY POSITIVE")=""
.S LABN("HEP C VIRUS ANTIBODY NEGATIVE")=""
.S LABN("HAV Ab positive")=""
.S LABN("HAV IgM Ab positive")=""
.S LABN("HAV IgG positive")=""
.S LABN("HBs Ab positive")=""
.S LABN("HBs Ag positive")=""
.S LABN("HBc Ab IgM positive")=""
.S LABN("HBe Ag positive")=""
.;NDB Transformations
.I PXRMNAM="VA-HEP C RISK ASSESSMENT" D
..S REM(PXRMITEM,"VA-DECLINED HEP C RISK ASSESSMENT")=1
..S REM(PXRMITEM,"VA-NO RISK FACTORS FOR HEP C")=2
..S REM(PXRMITEM,"VA-PREVIOUSLY ASSESSED HEP C RISK")=3
..S REM(PXRMITEM,"VA-RISK FACTOR FOR HEPATITIS C")=4
..S REM(PXRMITEM,"VA-HEP C VIRUS ANTIBODY POSITIVE")=5
..S REM(PXRMITEM,"VA-HEP C VIRUS ANTIBODY NEGATIVE")=6
..S REM(PXRMITEM,"VA-HEPATITIS C INFECTION")=7
;
;Build pharmacy codes list
F FTYPE="PSNDF(50.6,","PSDRUG(","PS(50.605," D
.S FIEN=""
.F S FIEN=$O(SEARCH(FTYPE,FIEN)) Q:'FIEN D
..S OR(FIEN_";"_FTYPE)=""
;
;Search for pharmacy outpatients
I $O(OR(""))]"" D EN^PSOORAPI(PXRMBDT,PXRMEDT,.OR,"F","PXRMPSO"_NODE)
;
;Search for pharmacy inpatients
I $O(OR(""))]"" D EN^PSJORAPI(PXRMBDT,PXRMEDT,.OR,"","PXRMPSI"_NODE)
;
;Build Lab codes list
S FTYPE="LAB(60,",FIEN="" K OR
F S FIEN=$O(SEARCH(FTYPE,FIEN)) Q:'FIEN D
.S OR(FIEN)=""
;
;Search for lab patients
I $O(OR(""))]"" D LAB^PXRMXX2(PXRMBDT,PXRMEDT,.OR,NODE)
;
;Build Health Factors list
S FTYPE="AUTTHF(",FIEN="" K OR
F S FIEN=$O(SEARCH(FTYPE,FIEN)) Q:'FIEN D
.S OR(FIEN)=""
;
;Search for HF patients
I $O(OR(""))]"" D HF^PXRMXX2(PXRMBDT,PXRMEDT,.OR,NODE)
;
;Build Patient Education list
S FTYPE="AUTTEDT(",FIEN="" K OR
F S FIEN=$O(SEARCH(FTYPE,FIEN)) Q:'FIEN D
.S OR(FIEN)=""
;
;Search for PED patients
I $O(OR(""))]"" D PED^PXRMXX2(PXRMBDT,PXRMEDT,.OR,NODE)
;
;Build Examination list
S FTYPE="AUTTEXAM(",FIEN="" K OR
F S FIEN=$O(SEARCH(FTYPE,FIEN)) Q:'FIEN D
.S OR(FIEN)=""
;
;Search for Exam patients
I $O(OR(""))]"" D EXAM^PXRMXX2(PXRMBDT,PXRMEDT,.OR,NODE)
;
;Build POV codes list
S FTYPE="ICD9(",FIEN="" K OR
F S FIEN=$O(SEARCH(FTYPE,FIEN)) Q:'FIEN D
.S OR(FIEN)="",^TMP("PXRMPOV"_NODE,$J,FIEN)=""
;
;Search for POV patients
I $O(OR(""))]"" D POV^PXRMXX2(PXRMBDT,PXRMEDT,"PXRMPOV"_NODE,NODE)
;
S BD=PXRMBDT-.0001,ED=PXRMEDT+.2359,DFN=""
F S DFN=$O(^TMP(NODE,$J,"TEMP",DFN)) Q:'DFN Q:TSTOP=1 D
.;Check if stop task requested
.I $$S^%ZTLOAD S TSTOP=1 Q
.;Update total patient count for report
.S PXRMCNT=PXRMCNT+1
.N FIND1,FCNT
.;Process reminders
.S PXRMITEM=0,FCNT=0
.F S PXRMITEM=$O(REM(PXRMITEM)) Q:'PXRMITEM D
..;Check reminder exists
..Q:'$D(^PXD(811.9,PXRMITEM,0))
..;Evaluate reminder to obtain list of findings
..N FIND
..D FIDATA^PXRM(DFN,PXRMITEM,.FIND)
..;Check if findings exist for the date range
..D FCHEK(PXRMITEM)
.;Save in ^TMP
.I FCNT D FSAVE K FIND1 S PXRMFCNT=PXRMFCNT+1
;
;Merge in patients from Outpatient Pharmacy
D PSMERG^PXRMXX1("PXRMPSO",NODE,.SEARCH)
;Merge in patients from Inpatient Pharmacy
D PSMERG^PXRMXX1("PXRMPSI",NODE,.SEARCH)
;
Q
;
;Complex logic to handle lab/reminder mismatches
;-----------------------------------------------
LTRAN S LTERM=$P($G(FIND(ENC,"TERM")),U) Q:LTERM=""
;Skip terms not used in cohort logic
I $D(LAB(LTERM)) S LTRAN=1 Q
;If one of selected list send the latest out of cohort entries instead
I $D(LABN(LTERM)) S LTRAN=1 Q:LDONE=1 D
.N ENC,TERM,DATE
.S ENC=0,LDONE=1
.F S ENC=$O(FIND(ENC)) Q:'ENC D
..S TERM=$P($G(FIND(ENC,"TERM")),U) Q:TERM=""
..;Check if the term is in the out of cohort list
..I $D(LAB(TERM)) D
...;Check if lab test is within date range or prior
...S DATE=$G(FIND(ENC,"DATE")) Q:DATE="" Q:DATE>ED
...D SAV
;
Q
;
;
;Entry point for API
;-------------------
PATS(PXRMBDT,PXRMEDT,NODE) ;
;
; PXRMBDT - Start date in fileman format
; PXRMEDT - End date in fileman format
; NODE - Target name for ^TMP(NODE,$J)
;
;Task stopped
N TSTOP S TSTOP=0
;
;
;Build temporary array of all wards
;N PXRMLCHL,PXRMLOCN D LCHL^PXRMXAP(1,.PXRMLCHL)
;
;Patients, patients with findings, finding and term counts
N PXRMCNT,PXRMFCNT,PXRMFIEN,PXRMTIEN S PXRMCNT=0,PXRMFCNT=0
;
;Clear ^TMP
K ^TMP(NODE,$J)
;Current inpatients
;D INP
;Inpatient admissions
;D ADM
;Outpatient visits
;D VISITS Q:TSTOP=1
;
;Check for findings in the selected patients
D FIND Q:TSTOP=1
;
;Save report
D REPORT^PXRMXX1(NODE)
;
;Remove list of all patients with encounters
K ^TMP(NODE,$J,"TEMP")
;Remove pharmacy outpatient list
K ^TMP("PXRMPSO"_NODE,$J)
;Remove pharmacy inpatient list
K ^TMP("PXRMPSI"_NODE,$J)
;Remove icd9 list
K ^TMP("PXRMPOV"_NODE,$J)
Q
;
;Build list of inpatients admissions
;-----------------------------------
ADM N HLOCIEN,IC,DFN,BD,ED
;Get admissions for each selected location
F IC=1:1 Q:'$D(PXRMLCHL(IC)) D
.S HLOCIEN=$P(PXRMLCHL(IC),U,2) Q:HLOCIEN=""
.; Get admissions from patient movements and return DFN's in PATS
.S BD=PXRMBDT-.0001
.S ED=PXRMEDT+.2359
.N PATS D ADM^PXRMXAP(HLOCIEN,.PATS,BD,ED)
.;Build ^TMP for selected patients
.S DFN=""
.F S DFN=$O(PATS(DFN)) Q:DFN="" D TMP
Q
;
;Build list of Current inpatients
;--------------------------------
INP N HLOCIEN,IC,DFN
;Get Current inpatients for each location
F IC=1:1 Q:'$D(PXRMLCHL(IC)) D
.S HLOCIEN=$P(PXRMLCHL(IC),U,2) Q:HLOCIEN=""
.;Get WARDIEN,WARDNAM and return DFN's in PATS
.N PATS D WARD^PXRMXAP(HLOCIEN,.PATS)
.;Build ^TMP for selected patients
.S DFN=""
.F S DFN=$O(PATS(DFN)) Q:DFN="" D TMP
Q
;
;Scan visit file to build list of patients
;-----------------------------------------
VISITS N BD,DFN,ED,HLOCIEN,IC,VIEN,VISIT
;
S BD=PXRMBDT-.0001
S ED=PXRMEDT+.2359
;Get Date ; DBIA #2028
F S BD=$O(^AUPNVSIT("B",BD)) Q:BD>ED Q:BD="" Q:TSTOP=1 D
.S VIEN=0
.;Get individual visit
.F S VIEN=$O(^AUPNVSIT("B",BD,VIEN)) Q:VIEN="" Q:TSTOP=1 D
..;Check if stop task requested
..I $$S^%ZTLOAD S TSTOP=1 Q
..;Screen Individual Visit
..S VISIT=$G(^AUPNVSIT(VIEN,0)) Q:VISIT=""
..;Patient IEN
..S DFN=$P(VISIT,U,5) Q:'DFN
..;Build patient list in ^TMP
..D TMP
Q
PXRMXX ; SLC/PJH - Extract Patient sample;07/29/2004
+1 ;;2.0;CLINICAL REMINDERS;;Feb 04, 2005
+2 ;
+3 ;Update ^TMP - all patients with encounters
+4 ;------------------------------------------
TMP SET ^TMP(NODE,$JOB,"TEMP",DFN)=""
QUIT
+1 ;
+2 ;Save individual encounter into FIND1
+3 ;------------------------------------
SAV SET FCNT=FCNT+1
SET FOUND=1
MERGE FIND1(FCNT)=FIND(ENC)
QUIT
+1 ;
+2 ;Check if finding is in date range
+3 ;---------------------------------
DCHK(DNODE) ;
+1 NEW DATE,LTERM,LTRAN,TNAM,SNUM,TERMNAM,TERMNAT
+2 SET DATE=$GET(FIND(ENC,DNODE))
IF DATE=""
QUIT
+3 ;
+4 IF (DATE<BD)!(DATE>ED)
QUIT
+5 ;Lab transforms
+6 IF REM(PXRMITEM)="VA-NATIONAL EPI LAB EXTRACT"
Begin DoDot:1
+7 SET LTRAN=0
IF $PIECE(FIND(ENC,"FINDING"),";",2)="LAB(60,"
DO LTRAN
End DoDot:1
IF LTRAN
QUIT
+8 ;National DB term mapping
+9 SET TERMNAM=$PIECE($GET(FIND(ENC,"TERM")),U)
+10 ;If term exists check if it needs re-mapping for this reminder
+11 IF TERMNAM]""
Begin DoDot:1
+12 ;Get the alternate name from the REM array
+13 SET TERMNAT=$GET(REM(PXRMITEM,TERMNAM))
IF TERMNAT=""
QUIT
+14 ;National database code
+15 SET FIND(ENC,"ALTTRM")=TERMNAT
End DoDot:1
+16 ;Set source number code
+17 SET SNUM=""
+18 IF $GET(FIND(ENC,"FILE NUMBER"))=9000011
SET SNUM=1
+19 IF $GET(FIND(ENC,"FILE NUMBER"))=9000010.07
SET SNUM=2
+20 IF $GET(FIND(ENC,"FILE NUMBER"))=45
SET SNUM=3
+21 SET FIND(ENC,"S/N")=SNUM
+22 ;
+23 ;Save encounter
+24 DO SAV
+25 QUIT
+26 ;
+27 ;Check for findings
+28 ;------------------
FCHEK(PXRMITEM) ;
+1 NEW ECNT,EDATE,ENC,LDONE,FOUND
+2 ;Get reminder name
+3 SET PXRMNAM=$PIECE($GET(^PXD(811.9,PXRMITEM,0)),U)
+4 ;Check each encounter
+5 SET ENC=0
SET ECNT=0
SET FOUND=0
SET LDONE=0
+6 FOR
SET ENC=$ORDER(FIND(ENC))
IF 'ENC
QUIT
Begin DoDot:1
+7 ;Ignore medications - these are loaded from pharmacy
+8 IF $DATA(FIND(ENC,"DRUG"))
QUIT
+9 ;Check if finding is in date range
+10 IF $DATA(FIND(ENC,"FINDING"))
DO DCHK("DATE")
End DoDot:1
+11 ;
+12 QUIT
+13 ;
+14 ;Update ^TMP - all patients with findings
+15 ;----------------------------------------
FSAVE NEW CNT,FIEN,FCNT,FUNIQ,FREC
+1 NEW VDATA,VDATE,VFOUND,VLAST,VIEN,VLTYP,VOK,VSERV,VTYP
+2 ;Extract the visit date and type from visit record
+3 SET CNT=0
SET FUNIQ=0
SET VLAST=0
SET VFOUND=0
SET VLTYP=""
+4 FOR
SET CNT=$ORDER(FIND1(CNT))
IF 'CNT
QUIT
Begin DoDot:1
+5 SET VOK=0
+6 IF $DATA(FIND1(CNT,"VIEN"))
Begin DoDot:2
+7 SET VIEN=$GET(FIND1(CNT,"VIEN"))
IF 'VIEN
QUIT
+8 SET VDATA=$GET(^AUPNVSIT(VIEN,0))
IF VDATA=""
QUIT
+9 ;Get visit date and service from visit record
+10 SET VDATE=$PIECE(VDATA,U)
SET VSERV=$PIECE(VDATA,U,7)
SET VFOUND=1
SET VOK=1
SET VTYP="O"
+11 ;Calculate visit type from sevice
+12 IF (VSERV="D")!(VSERV="H")!(VSERV="I")
SET VTYP="I"
End DoDot:2
+13 ;If no visit info default to finding date
+14 IF 'VOK
SET VDATE=$GET(FIND1(CNT,"DATE"))
SET VTYP="O"
Begin DoDot:2
+15 NEW VAIN,VAINDT
SET VAINDT=VDATE
DO INP^VADPT
+16 IF $GET(VAIN(7))'=""
SET VTYP="I"
End DoDot:2
+17 ;Save encounter/finding date and type
+18 SET FIND1(CNT)=VDATE_U_VTYP
+19 ;Save count by finding for report
+20 SET FIEN=$GET(FIND1(CNT,"FINDING"))
IF FIEN=""
SET FIEN="NO FINDING"
+21 SET FREC=$GET(PXRMFIEN(FIEN))
SET FCNT=$PIECE(FREC,U)
SET FUNIQ=$PIECE(FREC,U,2)
+22 SET FCNT=FCNT+1
IF '$GET(FUNIQ(FIEN))
SET FUNIQ=FUNIQ+1
+23 SET PXRMFIEN(FIEN)=FCNT_U_FUNIQ
SET FUNIQ(FIEN)=1
+24 ;Save most recent
+25 IF VDATE>VLAST
SET VLAST=VDATE
SET VLTYP=VTYP
End DoDot:1
+26 ;
+27 ;Save patient
+28 SET ^TMP(NODE,$JOB,DFN)=VLAST_U_VLTYP
+29 ;Save findings
+30 MERGE ^TMP(NODE,$JOB,DFN,"FIND")=FIND1
+31 ;
+32 QUIT
+33 ;
+34 ;Check each patient for findings
+35 ;-------------------------------
FIND NEW BD,DFN,ED,LAB,LABN,PXRMITEM,PXRMNAM,OR,REM,SAVE,SEARCH
+1 ;
+2 ;Build array of reminders and terms to be re-mapped
+3 ;
+4 ;This requires that LAB(69.51) is created to include a list of IEN's
+5 ;
+6 SET PXRMITEM=0
+7 FOR
SET PXRMITEM=$ORDER(^LAB(69.51,"B",PXRMITEM))
IF 'PXRMITEM
QUIT
Begin DoDot:1
+8 SET PXRMNAM=$PIECE($GET(^PXD(811.9,PXRMITEM,0)),U)
+9 IF PXRMNAM'="VA-NATIONAL EPI RX EXTRACT"
SET REM(PXRMITEM)=PXRMNAM
+10 ;Get finding list for these reminders and medication list
+11 DO REM^PXRMXX1(PXRMITEM,.SEARCH,.LAB)
+12 ;Hep A,B,C lab tests
+13 SET LABN("HEP C VIRUS ANTIBODY POSITIVE")=""
+14 SET LABN("HEP C VIRUS ANTIBODY NEGATIVE")=""
+15 SET LABN("HAV Ab positive")=""
+16 SET LABN("HAV IgM Ab positive")=""
+17 SET LABN("HAV IgG positive")=""
+18 SET LABN("HBs Ab positive")=""
+19 SET LABN("HBs Ag positive")=""
+20 SET LABN("HBc Ab IgM positive")=""
+21 SET LABN("HBe Ag positive")=""
+22 ;NDB Transformations
+23 IF PXRMNAM="VA-HEP C RISK ASSESSMENT"
Begin DoDot:2
+24 SET REM(PXRMITEM,"VA-DECLINED HEP C RISK ASSESSMENT")=1
+25 SET REM(PXRMITEM,"VA-NO RISK FACTORS FOR HEP C")=2
+26 SET REM(PXRMITEM,"VA-PREVIOUSLY ASSESSED HEP C RISK")=3
+27 SET REM(PXRMITEM,"VA-RISK FACTOR FOR HEPATITIS C")=4
+28 SET REM(PXRMITEM,"VA-HEP C VIRUS ANTIBODY POSITIVE")=5
+29 SET REM(PXRMITEM,"VA-HEP C VIRUS ANTIBODY NEGATIVE")=6
+30 SET REM(PXRMITEM,"VA-HEPATITIS C INFECTION")=7
End DoDot:2
End DoDot:1
+31 ;
+32 ;Build pharmacy codes list
+33 FOR FTYPE="PSNDF(50.6,","PSDRUG(","PS(50.605,"
Begin DoDot:1
+34 SET FIEN=""
+35 FOR
SET FIEN=$ORDER(SEARCH(FTYPE,FIEN))
IF 'FIEN
QUIT
Begin DoDot:2
+36 SET OR(FIEN_";"_FTYPE)=""
End DoDot:2
End DoDot:1
+37 ;
+38 ;Search for pharmacy outpatients
+39 IF $ORDER(OR(""))]""
DO EN^PSOORAPI(PXRMBDT,PXRMEDT,.OR,"F","PXRMPSO"_NODE)
+40 ;
+41 ;Search for pharmacy inpatients
+42 IF $ORDER(OR(""))]""
DO EN^PSJORAPI(PXRMBDT,PXRMEDT,.OR,"","PXRMPSI"_NODE)
+43 ;
+44 ;Build Lab codes list
+45 SET FTYPE="LAB(60,"
SET FIEN=""
KILL OR
+46 FOR
SET FIEN=$ORDER(SEARCH(FTYPE,FIEN))
IF 'FIEN
QUIT
Begin DoDot:1
+47 SET OR(FIEN)=""
End DoDot:1
+48 ;
+49 ;Search for lab patients
+50 IF $ORDER(OR(""))]""
DO LAB^PXRMXX2(PXRMBDT,PXRMEDT,.OR,NODE)
+51 ;
+52 ;Build Health Factors list
+53 SET FTYPE="AUTTHF("
SET FIEN=""
KILL OR
+54 FOR
SET FIEN=$ORDER(SEARCH(FTYPE,FIEN))
IF 'FIEN
QUIT
Begin DoDot:1
+55 SET OR(FIEN)=""
End DoDot:1
+56 ;
+57 ;Search for HF patients
+58 IF $ORDER(OR(""))]""
DO HF^PXRMXX2(PXRMBDT,PXRMEDT,.OR,NODE)
+59 ;
+60 ;Build Patient Education list
+61 SET FTYPE="AUTTEDT("
SET FIEN=""
KILL OR
+62 FOR
SET FIEN=$ORDER(SEARCH(FTYPE,FIEN))
IF 'FIEN
QUIT
Begin DoDot:1
+63 SET OR(FIEN)=""
End DoDot:1
+64 ;
+65 ;Search for PED patients
+66 IF $ORDER(OR(""))]""
DO PED^PXRMXX2(PXRMBDT,PXRMEDT,.OR,NODE)
+67 ;
+68 ;Build Examination list
+69 SET FTYPE="AUTTEXAM("
SET FIEN=""
KILL OR
+70 FOR
SET FIEN=$ORDER(SEARCH(FTYPE,FIEN))
IF 'FIEN
QUIT
Begin DoDot:1
+71 SET OR(FIEN)=""
End DoDot:1
+72 ;
+73 ;Search for Exam patients
+74 IF $ORDER(OR(""))]""
DO EXAM^PXRMXX2(PXRMBDT,PXRMEDT,.OR,NODE)
+75 ;
+76 ;Build POV codes list
+77 SET FTYPE="ICD9("
SET FIEN=""
KILL OR
+78 FOR
SET FIEN=$ORDER(SEARCH(FTYPE,FIEN))
IF 'FIEN
QUIT
Begin DoDot:1
+79 SET OR(FIEN)=""
SET ^TMP("PXRMPOV"_NODE,$JOB,FIEN)=""
End DoDot:1
+80 ;
+81 ;Search for POV patients
+82 IF $ORDER(OR(""))]""
DO POV^PXRMXX2(PXRMBDT,PXRMEDT,"PXRMPOV"_NODE,NODE)
+83 ;
+84 SET BD=PXRMBDT-.0001
SET ED=PXRMEDT+.2359
SET DFN=""
+85 FOR
SET DFN=$ORDER(^TMP(NODE,$JOB,"TEMP",DFN))
IF 'DFN
QUIT
IF TSTOP=1
QUIT
Begin DoDot:1
+86 ;Check if stop task requested
+87 IF $$S^%ZTLOAD
SET TSTOP=1
QUIT
+88 ;Update total patient count for report
+89 SET PXRMCNT=PXRMCNT+1
+90 NEW FIND1,FCNT
+91 ;Process reminders
+92 SET PXRMITEM=0
SET FCNT=0
+93 FOR
SET PXRMITEM=$ORDER(REM(PXRMITEM))
IF 'PXRMITEM
QUIT
Begin DoDot:2
+94 ;Check reminder exists
+95 IF '$DATA(^PXD(811.9,PXRMITEM,0))
QUIT
+96 ;Evaluate reminder to obtain list of findings
+97 NEW FIND
+98 DO FIDATA^PXRM(DFN,PXRMITEM,.FIND)
+99 ;Check if findings exist for the date range
+100 DO FCHEK(PXRMITEM)
End DoDot:2
+101 ;Save in ^TMP
+102 IF FCNT
DO FSAVE
KILL FIND1
SET PXRMFCNT=PXRMFCNT+1
End DoDot:1
+103 ;
+104 ;Merge in patients from Outpatient Pharmacy
+105 DO PSMERG^PXRMXX1("PXRMPSO",NODE,.SEARCH)
+106 ;Merge in patients from Inpatient Pharmacy
+107 DO PSMERG^PXRMXX1("PXRMPSI",NODE,.SEARCH)
+108 ;
+109 QUIT
+110 ;
+111 ;Complex logic to handle lab/reminder mismatches
+112 ;-----------------------------------------------
LTRAN SET LTERM=$PIECE($GET(FIND(ENC,"TERM")),U)
IF LTERM=""
QUIT
+1 ;Skip terms not used in cohort logic
+2 IF $DATA(LAB(LTERM))
SET LTRAN=1
QUIT
+3 ;If one of selected list send the latest out of cohort entries instead
+4 IF $DATA(LABN(LTERM))
SET LTRAN=1
IF LDONE=1
QUIT
Begin DoDot:1
+5 NEW ENC,TERM,DATE
+6 SET ENC=0
SET LDONE=1
+7 FOR
SET ENC=$ORDER(FIND(ENC))
IF 'ENC
QUIT
Begin DoDot:2
+8 SET TERM=$PIECE($GET(FIND(ENC,"TERM")),U)
IF TERM=""
QUIT
+9 ;Check if the term is in the out of cohort list
+10 IF $DATA(LAB(TERM))
Begin DoDot:3
+11 ;Check if lab test is within date range or prior
+12 SET DATE=$GET(FIND(ENC,"DATE"))
IF DATE=""
QUIT
IF DATE>ED
QUIT
+13 DO SAV
End DoDot:3
End DoDot:2
End DoDot:1
+14 ;
+15 QUIT
+16 ;
+17 ;
+18 ;Entry point for API
+19 ;-------------------
PATS(PXRMBDT,PXRMEDT,NODE) ;
+1 ;
+2 ; PXRMBDT - Start date in fileman format
+3 ; PXRMEDT - End date in fileman format
+4 ; NODE - Target name for ^TMP(NODE,$J)
+5 ;
+6 ;Task stopped
+7 NEW TSTOP
SET TSTOP=0
+8 ;
+9 ;
+10 ;Build temporary array of all wards
+11 ;N PXRMLCHL,PXRMLOCN D LCHL^PXRMXAP(1,.PXRMLCHL)
+12 ;
+13 ;Patients, patients with findings, finding and term counts
+14 NEW PXRMCNT,PXRMFCNT,PXRMFIEN,PXRMTIEN
SET PXRMCNT=0
SET PXRMFCNT=0
+15 ;
+16 ;Clear ^TMP
+17 KILL ^TMP(NODE,$JOB)
+18 ;Current inpatients
+19 ;D INP
+20 ;Inpatient admissions
+21 ;D ADM
+22 ;Outpatient visits
+23 ;D VISITS Q:TSTOP=1
+24 ;
+25 ;Check for findings in the selected patients
+26 DO FIND
IF TSTOP=1
QUIT
+27 ;
+28 ;Save report
+29 DO REPORT^PXRMXX1(NODE)
+30 ;
+31 ;Remove list of all patients with encounters
+32 KILL ^TMP(NODE,$JOB,"TEMP")
+33 ;Remove pharmacy outpatient list
+34 KILL ^TMP("PXRMPSO"_NODE,$JOB)
+35 ;Remove pharmacy inpatient list
+36 KILL ^TMP("PXRMPSI"_NODE,$JOB)
+37 ;Remove icd9 list
+38 KILL ^TMP("PXRMPOV"_NODE,$JOB)
+39 QUIT
+40 ;
+41 ;Build list of inpatients admissions
+42 ;-----------------------------------
ADM NEW HLOCIEN,IC,DFN,BD,ED
+1 ;Get admissions for each selected location
+2 FOR IC=1:1
IF '$DATA(PXRMLCHL(IC))
QUIT
Begin DoDot:1
+3 SET HLOCIEN=$PIECE(PXRMLCHL(IC),U,2)
IF HLOCIEN=""
QUIT
+4 ; Get admissions from patient movements and return DFN's in PATS
+5 SET BD=PXRMBDT-.0001
+6 SET ED=PXRMEDT+.2359
+7 NEW PATS
DO ADM^PXRMXAP(HLOCIEN,.PATS,BD,ED)
+8 ;Build ^TMP for selected patients
+9 SET DFN=""
+10 FOR
SET DFN=$ORDER(PATS(DFN))
IF DFN=""
QUIT
DO TMP
End DoDot:1
+11 QUIT
+12 ;
+13 ;Build list of Current inpatients
+14 ;--------------------------------
INP NEW HLOCIEN,IC,DFN
+1 ;Get Current inpatients for each location
+2 FOR IC=1:1
IF '$DATA(PXRMLCHL(IC))
QUIT
Begin DoDot:1
+3 SET HLOCIEN=$PIECE(PXRMLCHL(IC),U,2)
IF HLOCIEN=""
QUIT
+4 ;Get WARDIEN,WARDNAM and return DFN's in PATS
+5 NEW PATS
DO WARD^PXRMXAP(HLOCIEN,.PATS)
+6 ;Build ^TMP for selected patients
+7 SET DFN=""
+8 FOR
SET DFN=$ORDER(PATS(DFN))
IF DFN=""
QUIT
DO TMP
End DoDot:1
+9 QUIT
+10 ;
+11 ;Scan visit file to build list of patients
+12 ;-----------------------------------------
VISITS NEW BD,DFN,ED,HLOCIEN,IC,VIEN,VISIT
+1 ;
+2 SET BD=PXRMBDT-.0001
+3 SET ED=PXRMEDT+.2359
+4 ;Get Date ; DBIA #2028
+5 FOR
SET BD=$ORDER(^AUPNVSIT("B",BD))
IF BD>ED
QUIT
IF BD=""
QUIT
IF TSTOP=1
QUIT
Begin DoDot:1
+6 SET VIEN=0
+7 ;Get individual visit
+8 FOR
SET VIEN=$ORDER(^AUPNVSIT("B",BD,VIEN))
IF VIEN=""
QUIT
IF TSTOP=1
QUIT
Begin DoDot:2
+9 ;Check if stop task requested
+10 IF $$S^%ZTLOAD
SET TSTOP=1
QUIT
+11 ;Screen Individual Visit
+12 SET VISIT=$GET(^AUPNVSIT(VIEN,0))
IF VISIT=""
QUIT
+13 ;Patient IEN
+14 SET DFN=$PIECE(VISIT,U,5)
IF 'DFN
QUIT
+15 ;Build patient list in ^TMP
+16 DO TMP
End DoDot:2
End DoDot:1
+17 QUIT