[613] | 1 | PXRMXPR ; SLC/PJH - Print Reminder Due report. ;11/27/2006
|
---|
| 2 | ;;2.0;CLINICAL REMINDERS;**4,6**;Feb 04, 2005;Build 123
|
---|
| 3 | ;
|
---|
| 4 | ; Called/Jobbed after PXRMXSE1
|
---|
| 5 | ;
|
---|
| 6 | START N BMARG,CRITERIA,C1S,C2S,C3S,C1HS,C2HS,C3HS,DONE,FIRST,HEAD
|
---|
| 7 | N INDENT,PAGE,MOD,DES,ADES,CDES,RDES,SDES,MISSED,SEP
|
---|
| 8 | N PLSTCRIT,PXRMOPT,PXRMFLD,PXRMHDR,PXRMHDRS,PXRMT,PXRMH
|
---|
| 9 | N BD,ED,EMPCHK,SD,RD
|
---|
| 10 | N PXRMTX
|
---|
| 11 | S PXRMTX="due"
|
---|
| 12 | ;
|
---|
| 13 | I PXRMREP="D" D
|
---|
| 14 | .S EMPCHK=$P($G(^PXRM(800,1,"TRUNCATE EMPLOYEE SSN")),U)
|
---|
| 15 | .I EMPCHK="" S EMPCHK="Y"
|
---|
| 16 | ;
|
---|
| 17 | ; Format Date Range
|
---|
| 18 | I PXRMSEL="L" D
|
---|
| 19 | .S BD=$$FMTE^XLFDT(PXRMBDT,"5D")
|
---|
| 20 | .S ED=$$FMTE^XLFDT(PXRMEDT,"5D")
|
---|
| 21 | ; Format due effective date
|
---|
| 22 | S SD=$$FMTE^XLFDT(PXRMSDT,"5P")
|
---|
| 23 | ; Format run date
|
---|
| 24 | S RD=$$FMTE^XLFDT(PXRMXST,"5P")
|
---|
| 25 | ;
|
---|
| 26 | U IO
|
---|
| 27 | S DONE=0
|
---|
| 28 | ;
|
---|
| 29 | ;Delimited report.
|
---|
| 30 | S SEP=$S(PXRMTABS="Y":PXRMTABC,1:"")
|
---|
| 31 | ;
|
---|
| 32 | ;Setup initial formatting parameters.
|
---|
| 33 | S INDENT=3
|
---|
| 34 | S BMARG=2,PAGE=0,HEAD=1
|
---|
| 35 | ;
|
---|
| 36 | I +$G(XQY)>0 N XQOPT D OP^XQCHK
|
---|
| 37 | S PXRMOPT=$P($G(XQOPT),U,2)
|
---|
| 38 | I ($L(PXRMOPT)>0)&(PXRMOPT'["Clinical") S PXRMOPT="Clinical "_PXRMOPT
|
---|
| 39 | I PXRMREP="D" D
|
---|
| 40 | .S RDES=$P(REMINDER(1),U,2)
|
---|
| 41 | .S PXRMOPT=PXRMOPT_" - Detailed Report"
|
---|
| 42 | .N IC F IC=0,3,4 S PXRMH(IC)="",PXRMT(IC)=0
|
---|
| 43 | .S PXRMH(1)="Date Due Last Done Next Appt"
|
---|
| 44 | .S PXRMH(2)="-------- --------- ---------"
|
---|
| 45 | .I $G(PXRMINP) D
|
---|
| 46 | ..S PXRMH(1)="Date Due Last Done Ward/Bed"
|
---|
| 47 | ..S PXRMH(2)="-------- --------- --------"
|
---|
| 48 | .F IC=1,2 S PXRMT(IC)=40
|
---|
| 49 | .S ADES="Next Appointment only"
|
---|
| 50 | .I PXRMFUT="Y" S ADES="All Future Appointments"
|
---|
| 51 | .S SDES="Sorted by Patient Name"
|
---|
| 52 | .I PXRMSRT="Y" S SDES="Sorted by Appointment Date"
|
---|
| 53 | I PXRMREP="S" D
|
---|
| 54 | .S PXRMOPT=PXRMOPT_" - Summary Report"
|
---|
| 55 | .S PXRMH(0)="# Patients with Reminders",PXRMT(0)=50
|
---|
| 56 | .S PXRMH(1)="Applicable Due"
|
---|
| 57 | .S PXRMH(2)="---------- ---"
|
---|
| 58 | .N IC F IC=1,2 S PXRMT(IC)=50
|
---|
| 59 | .S PXRMH(3)="Denominator"
|
---|
| 60 | .S PXRMH(4)="-----------"
|
---|
| 61 | .F IC=3,4 S PXRMT(IC)=0
|
---|
| 62 | ;
|
---|
| 63 | ;Print Criteria Page if normal report
|
---|
| 64 | S CRITERIA=0 I PXRMTABS="N" S CRITERIA=1
|
---|
| 65 | ;or delimited report with notemplate
|
---|
| 66 | I PXRMTABS="Y",PXRMTMP="" S CRITERIA=1
|
---|
| 67 | ;
|
---|
| 68 | ;Build array of locations/providers with no patients selected in
|
---|
| 69 | ;MISSED.
|
---|
| 70 | D NOPATS^PXRMXPR1(.MISSED)
|
---|
| 71 | ;
|
---|
| 72 | ;Print either criteria page or summary header
|
---|
| 73 | I CRITERIA D G:DONE EXIT
|
---|
| 74 | .D PAGE^PXRMXGPR Q:DONE
|
---|
| 75 | .D CRIT^PXRMXGPR(10,.PLSTCRIT) Q:DONE
|
---|
| 76 | ;Header if delimited output from a template
|
---|
| 77 | I 'CRITERIA D
|
---|
| 78 | .N HDR1,HDR2,HDR3
|
---|
| 79 | .S HDR1="",HDR2="",HDR3=""
|
---|
| 80 | .I PXRMTMP]"" S HDR1="TITLE:"_$P(PXRMTMP,U,2)_U_"TEMPLATE:"_$P(PXRMTMP,U,3)
|
---|
| 81 | .I PXRMTMP="" D
|
---|
| 82 | ..N PXRMFLD,DES,CDES D LITS^PXRMXPR1 S HDR1=PXRMFLD_U_$G(DES)_U_$G(CDES)
|
---|
| 83 | .I PXRMSEL="L" S HDR2="START:"_BD_U_"END:"_ED
|
---|
| 84 | .S HDR2=HDR2_U_"RUN:"_RD_"Effective Date:"_SD
|
---|
| 85 | .I PXRMFCMB="Y" S HDR3="COMBINED FACILITY"
|
---|
| 86 | .I PXRMLCMB="Y" S $P(HDR3,SEP,2)="COMBINED LOCATION"
|
---|
| 87 | .I PXRMTCMB="Y" S $P(HDR3,SEP,2)="COMBINED OE/RR TEAMS"
|
---|
| 88 | .I PXRMREP="S" D
|
---|
| 89 | ..N LIT1,LIT2,LIT3
|
---|
| 90 | ..D LIT^PXRMXD
|
---|
| 91 | ..I PXRMTOT="I" S $P(HDR3,SEP,3)=$$UP^XLFSTR(LIT1)
|
---|
| 92 | ..I PXRMTOT="R" S $P(HDR3,SEP,3)=$$UP^XLFSTR(LIT2)
|
---|
| 93 | ..I PXRMTOT="T" S $P(HDR3,SEP,3)=$$UP^XLFSTR(LIT3)
|
---|
| 94 | .S PLSTCRIT(1)=HDR1,PLSTCRIT(2)=HDR2,PLSTCRIT(3)=HDR3
|
---|
| 95 | .W !,HDR1,!,HDR2,!,HDR3,!
|
---|
| 96 | ;
|
---|
| 97 | ;Kill items marked as found
|
---|
| 98 | K ^XTMP(PXRMXTMP,"MARKED AS FOUND")
|
---|
| 99 | ;
|
---|
| 100 | ;Setup the final formatting parameters.
|
---|
| 101 | S C1HS=INDENT+3
|
---|
| 102 | S C1S=0
|
---|
| 103 | S C2HS=C1S+2
|
---|
| 104 | S C2S=C2HS
|
---|
| 105 | S C3HS=C2HS+5
|
---|
| 106 | S C3S=C3HS
|
---|
| 107 | S HEAD=1
|
---|
| 108 | S INDENT=10
|
---|
| 109 | ;
|
---|
| 110 | ; Update last run date
|
---|
| 111 | I $G(PXRMTMP)'="" D UPD^PXRMXTU
|
---|
| 112 | ;
|
---|
| 113 | ; Get report detail from ^XTMP
|
---|
| 114 | N PNAM,SUB,DFN,BID,NAM,FAC,MOD,SRT,TOTAL,APPL,FACPNAME,PX,TTOTAL
|
---|
| 115 | S TTOTAL=0
|
---|
| 116 | ; Set subroutine label from report format
|
---|
| 117 | S MOD="SUMARY" I PXRMREP="D" S MOD="DETAIL"
|
---|
| 118 | ;
|
---|
| 119 | S FAC=0,PX="PXRM"
|
---|
| 120 | F S FAC=$O(^XTMP(PXRMXTMP,PX,FAC)) Q:FAC="" Q:DONE D
|
---|
| 121 | .;Get facility name for Location and PCMM team report
|
---|
| 122 | .I "TL"[PXRMSEL,PXRMFCMB="N" D
|
---|
| 123 | ..S FACPNAME=$P(PXRMFACN(FAC),U,1)_" "_$P(PXRMFACN(FAC),U,2)
|
---|
| 124 | .;Report from ^XTMP - label MOD is DETAIL/SUMARY
|
---|
| 125 | .S (PNAM,SUB,NAM,SRT)=""
|
---|
| 126 | .I PXRMSEL="I" S SUB="INDIVIDUAL PATIENTS" D @MOD Q:DONE
|
---|
| 127 | .I PXRMSEL'="I" D
|
---|
| 128 | ..;Sort internal IENs into alpha order
|
---|
| 129 | ..D XSORT
|
---|
| 130 | ..F S SRT=$O(^TMP($J,"SORT",SRT)) Q:SRT="" Q:DONE D
|
---|
| 131 | ...S SUB=$G(^TMP($J,"SORT",SRT)) D @MOD
|
---|
| 132 | ..I MOD="SUMARY","RT"[PXRMTOT S SUB="TOTAL" D @MOD
|
---|
| 133 | ;
|
---|
| 134 | ; Null report if no patients selected
|
---|
| 135 | I ('DONE),$O(^XTMP(PXRMXTMP,PX,""))="" D NULL^PXRMXGPR G EXIT
|
---|
| 136 | ; Report selected patient sample with no patients
|
---|
| 137 | I $D(MISSED),PXRMPML=1 D MISSED^PXRMXPR1(0,.MISSED)
|
---|
| 138 | ;
|
---|
| 139 | ;Print Patient List
|
---|
| 140 | I $G(PATLST)="Y" D FOOTER^PXRMXPR1(.PLSTCRIT)
|
---|
| 141 | ;
|
---|
| 142 | ;Print Error message
|
---|
| 143 | I $D(^XTMP(PXRMXTMP,"ERROR"))>0!($D(^XTMP(PXRMXTMP,"CNBD"))>0) D ERROR^PXRMXBSY
|
---|
| 144 | EXIT ;
|
---|
| 145 | D TIMING^PXRMXGUT
|
---|
| 146 | D EXIT^PXRMXGUT
|
---|
| 147 | ;
|
---|
| 148 | ;Allow the task to be cleaned up upon successful completion.
|
---|
| 149 | I $D(ZTQUEUED) S ZTREQ="@"
|
---|
| 150 | ;
|
---|
| 151 | D EOR^PXRMXGUT
|
---|
| 152 | Q
|
---|
| 153 | ;
|
---|
| 154 | ;Report by Patient
|
---|
| 155 | DETAIL N JJ,VA,DATE,COUNT,DDAT,EMP
|
---|
| 156 | N BED,DDUE,DDONE,DNEXT,FDAT1,FDAT2,FDAT3,FNAM,FTXT
|
---|
| 157 | S NAM=$G(^XTMP(PXRMXTMP,PX,FAC,SUB)),HEAD=1
|
---|
| 158 | S COUNT=$P(NAM,U,2),TOTAL=$P(NAM,U,3),APPL=$P(NAM,U,4),NAM=$P(NAM,U,1)
|
---|
| 159 | S DDAT="",JJ=0
|
---|
| 160 | ; Get list of patients for each appointment date
|
---|
| 161 | F S DDAT=$O(^XTMP(PXRMXTMP,PX,FAC,SUB,DDAT)) Q:DDAT="" Q:DONE D PAT
|
---|
| 162 | ; No patients due
|
---|
| 163 | I JJ=0 D:'DONE NONE^PXRMXGPR
|
---|
| 164 | ; Total patients
|
---|
| 165 | D:'DONE TOTAL^PXRMXGPR
|
---|
| 166 | S TTOTAL=TTOTAL+TOTAL
|
---|
| 167 | Q
|
---|
| 168 | ;
|
---|
| 169 | PAT ;Extract and print patient detail
|
---|
| 170 | N DNEXT1,NODE,PNUM
|
---|
| 171 | F S PNAM=$O(^XTMP(PXRMXTMP,PX,FAC,SUB,DDAT,PNAM)) Q:PNAM="" Q:DONE D
|
---|
| 172 | .S JJ=JJ+1
|
---|
| 173 | .;Format print line
|
---|
| 174 | .S (BID,DNEXT1,FDAT1,FDAT2,FDAT3,DNEXT1)="" I PNAM'["No patients found" D
|
---|
| 175 | ..S FDAT2="N/A",FDAT3="None"
|
---|
| 176 | ..S NODE=$G(^XTMP(PXRMXTMP,PX,FAC,SUB,DDAT,PNAM))
|
---|
| 177 | ..S DDUE=$P(NODE,U,2),DDONE=$P(NODE,U,3),DNEXT=$P(NODE,U,4)
|
---|
| 178 | ..S BED=$P(NODE,U,5)
|
---|
| 179 | ..S DFN=$P(NODE,U) S BID=$P($G(PNAM),U,2)
|
---|
| 180 | ..I PXRMSSN="N" S BID=$E(BID,6,9)
|
---|
| 181 | ..I PXRMSSN="Y",EMPCHK="Y" D EMP S:EMP BID=$E(BID,6,9)
|
---|
| 182 | ..S BID="("_BID_")"
|
---|
| 183 | ..S FDAT1=$$FMTE^XLFDT(DDUE,"5D")
|
---|
| 184 | ..I DDONE S FDAT2=$$FMTE^XLFDT(DDONE,"5D")
|
---|
| 185 | ..I BED'="NONE" S FDAT3=$P(NODE,U,5),DNEXT1=$$FMTE^XLFDT(DNEXT,"5D")
|
---|
| 186 | ..I DNEXT,FDAT3="None" S FDAT3=$$FMTE^XLFDT(DNEXT,"5D")
|
---|
| 187 | .;Print
|
---|
| 188 | .D CHECK Q:DONE
|
---|
| 189 | .;Normal output
|
---|
| 190 | .I PXRMTABS="N" D
|
---|
| 191 | ..S PNUM=JJ#10000
|
---|
| 192 | ..S PNUM=$$RJ^XLFSTR(PNUM,4)
|
---|
| 193 | ..W !,PNUM,?5,$E($P($G(PNAM),U),1,33-$L(BID))," ",BID,?40,FDAT1,?52,FDAT2
|
---|
| 194 | ..I ('$G(PXRMINP)),PXRMFUT'="Y" W ?64,$S(BED'="NONE":BED_" (Inp.)",1:FDAT3)
|
---|
| 195 | ..I $G(PXRMINP) W ?64,BED
|
---|
| 196 | ..I DNEXT1'="",PXRMFUT'="Y" W !,?64,DNEXT1
|
---|
| 197 | .;Delimited report
|
---|
| 198 | .I PXRMTABS="Y" D
|
---|
| 199 | ..N FNAM
|
---|
| 200 | ..S FNAM=$P($G(PNAM),U)
|
---|
| 201 | ..I FNAM'["No patients found" S FNAM=$E(FNAM,1,33-$L(BID))_" "_BID
|
---|
| 202 | ..I "CES"[PXRMTABC S FNAM=$TR(FNAM,SEP,"_"),FDAT1=$TR(FDAT1,SEP,"_")
|
---|
| 203 | ..I BED="NONE" S BED=" "
|
---|
| 204 | ..W !,JJ_SEP_FNAM_SEP_FDAT1_SEP_FDAT2 I $G(PXRMINP) W SEP_BED
|
---|
| 205 | ..I ('$G(PXRMINP)),PXRMFUT'="Y" W SEP_FDAT3_SEP_BED
|
---|
| 206 | .;---
|
---|
| 207 | .; Future Appointments
|
---|
| 208 | .I PXRMFUT="Y" D
|
---|
| 209 | ..N CNT,ADAT,ALOC,ATYP,FIRST,NONE
|
---|
| 210 | ..S CNT=0,NONE=1,FIRST=1
|
---|
| 211 | ..I '$D(^XTMP(PXRMXTMP,PX,FAC,SUB,DDAT,PNAM)) Q
|
---|
| 212 | ..F S CNT=$O(^XTMP(PXRMXTMP,PX,FAC,SUB,DDAT,PNAM,CNT)) Q:CNT'>0 D
|
---|
| 213 | ...S ADAT=$P(^XTMP(PXRMXTMP,PX,FAC,SUB,DDAT,PNAM,CNT,0),U)
|
---|
| 214 | ...I PXRMDLOC="Y" D
|
---|
| 215 | ....S ALOC=$P(^XTMP(PXRMXTMP,PX,FAC,SUB,DDAT,PNAM,CNT,0),U,2)
|
---|
| 216 | ....S ATYP=$P(^XTMP(PXRMXTMP,PX,FAC,SUB,DDAT,PNAM,CNT,0),U,3)
|
---|
| 217 | ...S ADAT=$$FMTE^XLFDT(ADAT,"2P")
|
---|
| 218 | ...I FIRST D S FIRST=0,NONE=0
|
---|
| 219 | ....I PXRMTABS="N" W ?64,$S(BED'="NONE":BED_" (Inp.)",1:"")
|
---|
| 220 | ...D CHECK
|
---|
| 221 | ...I PXRMDLOC="Y" D
|
---|
| 222 | ....I PXRMTABS="N" W !,?8,ADAT,?30,$E(ALOC,1,25),?60,$E(ATYP,1,20)
|
---|
| 223 | ....I PXRMTABS="Y" W SEP_ADAT_SEP_$E(ALOC,1,25)_SEP_$E(ATYP,1,20)
|
---|
| 224 | ...I PXRMDLOC="N" D
|
---|
| 225 | ....I PXRMTABS="N" W !,?10,ADAT
|
---|
| 226 | ....I PXRMTABS="Y" W SEP_ADAT
|
---|
| 227 | ..I NONE,PXRMTABS="N" W ?64,FDAT3
|
---|
| 228 | ..I NONE,PXRMTABS="Y" W SEP_FDAT3
|
---|
| 229 | ..I PXRMTABS="Y" W $S(BED'="NONE":SEP_BED_" (Inp.)",1:"")
|
---|
| 230 | ..K ^UTILITY("VASD",$J)
|
---|
| 231 | Q
|
---|
| 232 | ;
|
---|
| 233 | ;Summary by Reminder
|
---|
| 234 | SUMARY N JJ,EVAL,DUE,RNAM,RNUM,ITEM,COUNT,FTXT
|
---|
| 235 | S NAM=$G(^XTMP(PXRMXTMP,PX,FAC,SUB)),HEAD=1
|
---|
| 236 | S TOTAL=$P(NAM,U,3),COUNT=$P(NAM,U,2),NAM=$P(NAM,U,1)
|
---|
| 237 | S RNUM=$O(REMINDER(""),-1)
|
---|
| 238 | ;Get reminders in alpha order
|
---|
| 239 | F JJ=1:1:RNUM D Q:DONE
|
---|
| 240 | .S ITEM=$P(REMINDER(JJ),U,1),RNAM=$P(REMINDER(JJ),U,4)
|
---|
| 241 | .S:RNAM="" RNAM=$P(REMINDER(JJ),U,2)
|
---|
| 242 | .; zero lines will be printed
|
---|
| 243 | .S DUE=$G(^XTMP(PXRMXTMP,PX,FAC,SUB,ITEM))
|
---|
| 244 | .S EVAL=+$P(DUE,U,1),DUE=+$P(DUE,U,2)
|
---|
| 245 | .;Print
|
---|
| 246 | .D CHECK Q:DONE
|
---|
| 247 | .;Normal Report
|
---|
| 248 | .I PXRMTABS="N" W !,JJ,?5,RNAM,?48,$J(EVAL,10),?63,$J(DUE,10)
|
---|
| 249 | .;Condensed Report
|
---|
| 250 | .I PXRMTABS="Y" D
|
---|
| 251 | ..I "CES"[PXRMTABC S RNAM=$TR(RNAM,SEP,"_")
|
---|
| 252 | ..W !,JJ_SEP_RNAM_SEP_EVAL_SEP_DUE_SEP_$TR(NAM,SEP,"_")
|
---|
| 253 | D:'DONE TOTAL^PXRMXGPR
|
---|
| 254 | I $G(SUB)'="TOTAL",PXRMTOT'="T" S TTOTAL=TTOTAL+TOTAL
|
---|
| 255 | I $G(SUB)="TOTAL",PXRMTOT="T" S TTOTAL=TTOTAL+TOTAL
|
---|
| 256 | Q
|
---|
| 257 | ;
|
---|
| 258 | ;Check line count before writing line
|
---|
| 259 | CHECK I ((PXRMTABS="N")&($Y>(IOSL-BMARG-3)))!(HEAD=1) D COL^PXRMXGPR(1)
|
---|
| 260 | Q
|
---|
| 261 | ;
|
---|
| 262 | ;Check if employee
|
---|
| 263 | EMP N VAEL
|
---|
| 264 | D ELIG^VADPT
|
---|
| 265 | ;Check TYPE (#391) field
|
---|
| 266 | I $P($G(VAEL(6)),U,2)="EMPLOYEE" S EMP=1 Q
|
---|
| 267 | ;Check PATIENT ELIGABILITY (#361) field
|
---|
| 268 | N ELIG
|
---|
| 269 | S ELIG=0,EMP=0
|
---|
| 270 | F S ELIG=$O(VAEL(1,ELIG)) Q:'ELIG D Q:EMP
|
---|
| 271 | .I $P($G(VAEL(1,ELIG)),U,2)="EMPLOYEE" S EMP=1
|
---|
| 272 | Q
|
---|
| 273 | ;
|
---|
| 274 | ;Sort internal numbers into Alpha order
|
---|
| 275 | XSORT N SUB,NAM
|
---|
| 276 | K ^TMP($J,"SORT")
|
---|
| 277 | S SUB=""
|
---|
| 278 | F S SUB=$O(^XTMP(PXRMXTMP,PX,FAC,SUB)) Q:SUB="" D
|
---|
| 279 | .Q:SUB="TOTAL"
|
---|
| 280 | .S NAM=$P(^XTMP(PXRMXTMP,PX,FAC,SUB),U)
|
---|
| 281 | .I NAM="" S NAM=SUB
|
---|
| 282 | .S ^TMP($J,"SORT",NAM)=SUB
|
---|
| 283 | Q
|
---|
| 284 | ;
|
---|