Ignore:
Timestamp:
Dec 4, 2009, 12:11:15 AM (14 years ago)
Author:
George Lilly
Message:

revised back to 6/30/08 version

File:
1 edited

Legend:

Unmodified
Added
Removed
  • WorldVistAEHR/trunk/r/CLINICAL_REMINDERS-PXRM/PXRMXPR.m

    r613 r623  
    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         ;
     1PXRMXPR ; SLC/PJH - Print Reminder Due report. ;01/14/2006
     2 ;;2.0;CLINICAL REMINDERS;**4**;Feb 04, 2005;Build 21
     3 ;
     4 ; Called/Jobbed after PXRMXSE1
     5 ;
     6START 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) 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
     144EXIT ;
     145 D EXIT^PXRMXGUT
     146 ;
     147 ;Allow the task to be cleaned up upon successful completion.
     148 I $D(ZTQUEUED) S ZTREQ="@"
     149 ;
     150 D EOR^PXRMXGUT
     151 Q
     152 ;
     153 ;Report by Patient
     154DETAIL N JJ,VA,DATE,COUNT,DDAT,EMP
     155 N BED,DDUE,DDONE,DNEXT,FDAT1,FDAT2,FDAT3,FNAM,FTXT
     156 S NAM=$G(^XTMP(PXRMXTMP,PX,FAC,SUB)),HEAD=1
     157 S COUNT=$P(NAM,U,2),TOTAL=$P(NAM,U,3),APPL=$P(NAM,U,4),NAM=$P(NAM,U,1)
     158 S DDAT="",JJ=0
     159 ; Get list of patients for each appointment date
     160 F  S DDAT=$O(^XTMP(PXRMXTMP,PX,FAC,SUB,DDAT)) Q:DDAT=""  Q:DONE  D PAT
     161 ; No patients due
     162 I JJ=0 D:'DONE NONE^PXRMXGPR
     163 ; Total patients
     164 D:'DONE TOTAL^PXRMXGPR
     165 S TTOTAL=TTOTAL+TOTAL
     166 Q
     167 ;
     168PAT ;Extract and print patient detail
     169 N DNEXT1,NODE,PNUM
     170 F  S PNAM=$O(^XTMP(PXRMXTMP,PX,FAC,SUB,DDAT,PNAM)) Q:PNAM=""  Q:DONE  D
     171 .S JJ=JJ+1
     172 .;Format print line
     173 .S (BID,DNEXT1,FDAT1,FDAT2,FDAT3,DNEXT1)="" I PNAM'["No patients found" D
     174 ..S FDAT2="N/A",FDAT3="None"
     175 ..S NODE=$G(^XTMP(PXRMXTMP,PX,FAC,SUB,DDAT,PNAM))
     176 ..S DDUE=$P(NODE,U,2),DDONE=$P(NODE,U,3),DNEXT=$P(NODE,U,4)
     177 ..S BED=$P(NODE,U,5)
     178 ..S DFN=$P(NODE,U) S BID=$P($G(PNAM),U,2)
     179 ..I PXRMSSN="N" S BID=$E(BID,6,9)
     180 ..I PXRMSSN="Y",EMPCHK="Y" D EMP S:EMP BID=$E(BID,6,9)
     181 ..S BID="("_BID_")"
     182 ..S FDAT1=$$FMTE^XLFDT(DDUE,"5D")
     183 ..I DDONE S FDAT2=$$FMTE^XLFDT(DDONE,"5D")
     184 ..I BED'="NONE" S FDAT3=$P(NODE,U,5),DNEXT1=$$FMTE^XLFDT(DNEXT,"5D")
     185 ..I DNEXT,FDAT3="None" S FDAT3=$$FMTE^XLFDT(DNEXT,"5D")
     186 .;Print
     187 .D CHECK Q:DONE
     188 .;Normal output
     189 .I PXRMTABS="N" D
     190 ..S PNUM=JJ#10000
     191 ..S PNUM=$$RJ^XLFSTR(PNUM,4)
     192 ..W !,PNUM,?5,$E($P($G(PNAM),U),1,33-$L(BID))," ",BID,?40,FDAT1,?52,FDAT2
     193 ..I ('$G(PXRMINP)),PXRMFUT'="Y" W ?64,$S(BED'="NONE":BED_" (Inp.)",1:FDAT3)
     194 ..I $G(PXRMINP) W ?64,BED
     195 ..I DNEXT1'="",PXRMFUT'="Y" W !,?64,DNEXT1
     196 .;Delimited report
     197 .I PXRMTABS="Y" D
     198 ..N FNAM
     199 ..S FNAM=$P($G(PNAM),U)
     200 ..I FNAM'["No patients found" S FNAM=$E(FNAM,1,33-$L(BID))_" "_BID
     201 ..I "CES"[PXRMTABC S FNAM=$TR(FNAM,SEP,"_"),FDAT1=$TR(FDAT1,SEP,"_")
     202 ..I BED="NONE" S BED=" "
     203 ..W !,JJ_SEP_FNAM_SEP_FDAT1_SEP_FDAT2 I $G(PXRMINP) W SEP_BED
     204 ..I ('$G(PXRMINP)),PXRMFUT'="Y" W SEP_FDAT3_SEP_BED
     205 .;---
     206 .; Future Appointments
     207 .I PXRMFUT="Y" D
     208 ..N CNT,ADAT,ALOC,ATYP,FIRST,NONE
     209 ..S CNT=0,NONE=1,FIRST=1
     210 ..I '$D(^XTMP(PXRMXTMP,PX,FAC,SUB,DDAT,PNAM)) Q
     211 ..F  S CNT=$O(^XTMP(PXRMXTMP,PX,FAC,SUB,DDAT,PNAM,CNT)) Q:CNT'>0  D
     212 ...S ADAT=$P(^XTMP(PXRMXTMP,PX,FAC,SUB,DDAT,PNAM,CNT,0),U)
     213 ...I PXRMDLOC="Y" D
     214 ....S ALOC=$P(^XTMP(PXRMXTMP,PX,FAC,SUB,DDAT,PNAM,CNT,0),U,2)
     215 ....S ATYP=$P(^XTMP(PXRMXTMP,PX,FAC,SUB,DDAT,PNAM,CNT,0),U,3)
     216 ...S ADAT=$$FMTE^XLFDT(ADAT,"2P")
     217 ...I FIRST D  S FIRST=0,NONE=0
     218 ....I PXRMTABS="N" W ?64,$S(BED'="NONE":BED_" (Inp.)",1:"")
     219 ...D CHECK
     220 ...I PXRMDLOC="Y" D
     221 ....I PXRMTABS="N" W !,?8,ADAT,?30,$E(ALOC,1,25),?60,$E(ATYP,1,20)
     222 ....I PXRMTABS="Y" W SEP_ADAT_SEP_$E(ALOC,1,25)_SEP_$E(ATYP,1,20)
     223 ...I PXRMDLOC="N" D
     224 ....I PXRMTABS="N" W !,?10,ADAT
     225 ....I PXRMTABS="Y" W SEP_ADAT
     226 ..I NONE,PXRMTABS="N" W ?64,FDAT3
     227 ..I NONE,PXRMTABS="Y" W SEP_FDAT3
     228 ..I PXRMTABS="Y" W $S(BED'="NONE":SEP_BED_" (Inp.)",1:"")
     229 ..K ^UTILITY("VASD",$J)
     230 Q
     231 ;
     232 ;Summary by Reminder
     233SUMARY N JJ,EVAL,DUE,RNAM,RNUM,ITEM,COUNT,FTXT
     234 S NAM=$G(^XTMP(PXRMXTMP,PX,FAC,SUB)),HEAD=1
     235 S TOTAL=$P(NAM,U,3),COUNT=$P(NAM,U,2),NAM=$P(NAM,U,1)
     236 S RNUM=$O(REMINDER(""),-1)
     237 ;Get reminders in alpha order
     238 F JJ=1:1:RNUM D  Q:DONE
     239 .S ITEM=$P(REMINDER(JJ),U,1),RNAM=$P(REMINDER(JJ),U,4)
     240 .S:RNAM="" RNAM=$P(REMINDER(JJ),U,2)
     241 .; zero lines will be printed
     242 .S DUE=$G(^XTMP(PXRMXTMP,PX,FAC,SUB,ITEM))
     243 .S EVAL=+$P(DUE,U,1),DUE=+$P(DUE,U,2)
     244 .;Print
     245 .D CHECK Q:DONE
     246 .;Normal Report
     247 .I PXRMTABS="N" W !,JJ,?5,RNAM,?48,$J(EVAL,10),?63,$J(DUE,10)
     248 .;Condensed Report
     249 .I PXRMTABS="Y" D
     250 ..I "CES"[PXRMTABC S RNAM=$TR(RNAM,SEP,"_")
     251 ..W !,JJ_SEP_RNAM_SEP_EVAL_SEP_DUE_SEP_$TR(NAM,SEP,"_")
     252 D:'DONE TOTAL^PXRMXGPR
     253 I $G(SUB)'="TOTAL",PXRMTOT'="T" S TTOTAL=TTOTAL+TOTAL
     254 I $G(SUB)="TOTAL",PXRMTOT="T" S TTOTAL=TTOTAL+TOTAL
     255 Q
     256 ;
     257 ;Check line count before writing line
     258CHECK I ((PXRMTABS="N")&($Y>(IOSL-BMARG-3)))!(HEAD=1) D COL^PXRMXGPR(1)
     259 Q
     260 ;
     261 ;Check if employee
     262EMP N VAEL
     263 D ELIG^VADPT
     264 ;Check TYPE (#391) field
     265 I $P($G(VAEL(6)),U,2)="EMPLOYEE" S EMP=1 Q
     266 ;Check PATIENT ELIGABILITY (#361) field
     267 N ELIG
     268 S ELIG=0,EMP=0
     269 F  S ELIG=$O(VAEL(1,ELIG)) Q:'ELIG  D  Q:EMP
     270 .I $P($G(VAEL(1,ELIG)),U,2)="EMPLOYEE" S EMP=1
     271 Q
     272 ;
     273 ;Sort internal numbers into Alpha order
     274XSORT N SUB,NAM
     275 K ^TMP($J,"SORT")
     276 S SUB=""
     277 F  S SUB=$O(^XTMP(PXRMXTMP,PX,FAC,SUB)) Q:SUB=""  D
     278 .Q:SUB="TOTAL"
     279 .S NAM=$P(^XTMP(PXRMXTMP,PX,FAC,SUB),U)
     280 .I NAM="" S NAM=SUB
     281 .S ^TMP($J,"SORT",NAM)=SUB
     282 Q
     283 ;
Note: See TracChangeset for help on using the changeset viewer.