| 1 | RGMTAUDP ;BIR/CML,PTD-MPI/PD AUDIT File Print of Patient Data ;01/06/99
 | 
|---|
| 2 |  ;;1.0;CLINICAL INFO RESOURCE NETWORK;**19,30,46**;30 Apr 99
 | 
|---|
| 3 |  ;Reference to ^DD(2 supported by IA #2695.
 | 
|---|
| 4 |  ;Reference to ^DIA(2 and data derived from the AUDIT file (#1.1)
 | 
|---|
| 5 |  ;supported by IA #2097 and #2602.
 | 
|---|
| 6 |  ;Reference to ^ORD(101 supported by IA #2596
 | 
|---|
| 7 |  ;
 | 
|---|
| 8 | BEGIN ;
 | 
|---|
| 9 |  S QFLG=1
 | 
|---|
| 10 |  W @IOF
 | 
|---|
| 11 |  W !,"This option prints a customized report of information stored in the AUDIT"
 | 
|---|
| 12 |  W !,"file (#1.1) for fields being audited in the PATIENT file (#2).  For a"
 | 
|---|
| 13 |  W !,"specified date range, you can view all audited fields or selected fields."
 | 
|---|
| 14 |  W !,"You can also opt to print only edits that were done by a specific user."
 | 
|---|
| 15 |  W !!,"- If selected fields are viewed, you can choose to see data for all or"
 | 
|---|
| 16 |  W !,"  selected patients."
 | 
|---|
| 17 |  W !,"- If ALL audited fields are viewed, you must choose patients to examine."
 | 
|---|
| 18 |  ;
 | 
|---|
| 19 | ASKFLD ;Ask for Data Fields
 | 
|---|
| 20 |  I '$O(^DD(2,"AUDIT",0)) W !!,"No fields are currently being audited in the PATIENT file (#2)." G QUIT
 | 
|---|
| 21 |  W !
 | 
|---|
| 22 |  K DIR S DIR(0)="SAM^A:ALL;S:SELECTED;"
 | 
|---|
| 23 |  S DIR("A")="Do you want to see (A)LL or (S)ELECTED audited fields? "
 | 
|---|
| 24 |  S DIR("B")="A"
 | 
|---|
| 25 |  S DIR("?",1)="Enter:"
 | 
|---|
| 26 |  S DIR("?",2)=" ""A"" to see ALL audited fields in the PATIENT file (#2)."
 | 
|---|
| 27 |  S DIR("?")=" ""S"" to select specific audited fields."
 | 
|---|
| 28 |  D ^DIR G:$D(DIRUT) QUIT S ANS1=Y
 | 
|---|
| 29 |  ;
 | 
|---|
| 30 | FLDLOOP ;
 | 
|---|
| 31 |  W ! K FLD
 | 
|---|
| 32 |  ;stuff all fields
 | 
|---|
| 33 |  I ANS1="A" D  G ASKPAT
 | 
|---|
| 34 |  .S FLD=0 F  S FLD=$O(^DD(2,"AUDIT",FLD)) Q:'FLD  S FLD(FLD)=""
 | 
|---|
| 35 |  ;ask for specific fields
 | 
|---|
| 36 |  K DIR S DIR(0)="NAOC^.0000001:9999999:7^K:'$D(^DD(2,""AUDIT"",X)) X S RGERR=1"
 | 
|---|
| 37 |  S DIR("A")="Select FIELD NUMBER of audited field (enter ""?"" for list): "
 | 
|---|
| 38 |  S DIR("?")="^D FLDLIST^RGMTAUDP"
 | 
|---|
| 39 |  F QQ=0:0 S RGERR=0 D ^DIR Q:$D(DIRUT)  S FLD(+Y)=""
 | 
|---|
| 40 |  ;
 | 
|---|
| 41 | ASKPAT ;Ask for Patient
 | 
|---|
| 42 |  I '$O(FLD(0))!($D(DUOUT)) S QFLG=1 G QUIT
 | 
|---|
| 43 |  I ANS1="A" S ANS2="S" G PATLOOP
 | 
|---|
| 44 |  K DIR S DIR(0)="SAM^A:ALL;S:SELECTED;"
 | 
|---|
| 45 |  S DIR("A")="Do you want to see audited data for (A)LL or (S)ELECTED patients? "
 | 
|---|
| 46 |  S DIR("B")="S"
 | 
|---|
| 47 |  S DIR("?",1)="Enter:"
 | 
|---|
| 48 |  S DIR("?",2)=" ""A"" to see audited fields for ALL patients."
 | 
|---|
| 49 |  S DIR("?")=" ""S"" to select specific patients(s)."
 | 
|---|
| 50 |  W ! D ^DIR G:$D(DIRUT) QUIT S ANS2=Y
 | 
|---|
| 51 | PATLOOP ;
 | 
|---|
| 52 |  W ! K PAT
 | 
|---|
| 53 |  I ANS2="A" S PAT("ALL")="" G ASKDT
 | 
|---|
| 54 |  ;ask for specific patient(s)
 | 
|---|
| 55 |  F QQ=0:0 S DIC="^DPT(",DIC(0)="QEAM",DIC("A")="Select PATIENT: " D ^DIC K DIC Q:Y<0  S RGDFN=+Y D
 | 
|---|
| 56 |  .I '$O(^DIA(2,"B",RGDFN,0)) W $C(7),!?5,"This patient has no audit data available for any date." Q
 | 
|---|
| 57 |  .S PAT(RGDFN)=""
 | 
|---|
| 58 |  ;
 | 
|---|
| 59 | ASKDT ;Ask for Date Range
 | 
|---|
| 60 |  I '$D(PAT)!($D(DUOUT)) S QFLG=1 G QUIT
 | 
|---|
| 61 |  W !!,"Enter date range for data to be included in report."
 | 
|---|
| 62 |  K DIR,DIRUT,DTOUT,DUOUT S DIR(0)="DAO^:DT:EPX",DIR("A")="Beginning Date:  " D ^DIR K DIR G:$D(DIRUT) QUIT
 | 
|---|
| 63 |  S RGBDT=Y,DIR(0)="DAO^"_RGBDT_":DT:EPX",DIR("A")="Ending Date:  " D ^DIR K DIR G:$D(DIRUT) QUIT S RGEDT=Y
 | 
|---|
| 64 |  ;
 | 
|---|
| 65 | ASKUSER ;Ask if data is wanted only a specific user
 | 
|---|
| 66 |  K USERSCRN
 | 
|---|
| 67 |  W ! S DIR(0)="Y",DIR("B")="No",DIR("A")="Do you want to find only the edits made by a specific user"
 | 
|---|
| 68 |  D ^DIR K DIR I +Y'=1 G DEV
 | 
|---|
| 69 |  ;
 | 
|---|
| 70 |  S DIC="^VA(200,",DIC(0)="QEAM",DIC("A")="Select USER: "
 | 
|---|
| 71 |  D ^DIC K DIC G:+Y<0 QUIT S USERSCRN=+Y
 | 
|---|
| 72 |  ;
 | 
|---|
| 73 | DEV W !!,"The right margin for this report is 80.",!!
 | 
|---|
| 74 |  I ANS2="A" S IOP="Q" W "Because you selected ALL patients, you MUST queue this report.",!!
 | 
|---|
| 75 |  S ZTSAVE("RGBDT")="",ZTSAVE("RGEDT")="",ZTSAVE("ANS2")="",ZTSAVE("FLD(")="",ZTSAVE("PAT(")="",%ZIS("B")=""
 | 
|---|
| 76 |  S ZTSAVE("USERSCRN")=""
 | 
|---|
| 77 |  D EN^XUTMDEVQ("START^RGMTAUDP","MPI/PD - Print AUDIT File Data from the PATIENT file",.ZTSAVE,.%ZIS) I 'POP Q
 | 
|---|
| 78 |  W !,"NO DEVICE SELECTED OR REPORT PRINTED!!"
 | 
|---|
| 79 |  S QFLG=1 G QUIT
 | 
|---|
| 80 |  ;
 | 
|---|
| 81 | START ;
 | 
|---|
| 82 |  K ^TMP("RGMTAUDP",$J),^TMP("RGMTAUDP2",$J) S U="^"
 | 
|---|
| 83 |  S STOP=RGEDT+1
 | 
|---|
| 84 |  I ANS2="A" D
 | 
|---|
| 85 |  .S CNT=0
 | 
|---|
| 86 |  .S RGDFN=0 F  S RGDFN=$O(^DIA(2,"B",RGDFN)) Q:'RGDFN  S CNT=CNT+1 S:'(CNT#10000) ^TMP("RGMTAUDP",$J,"@@@@","CUR DFN")=RGDFN D LOOP
 | 
|---|
| 87 |  I ANS2="S" D
 | 
|---|
| 88 |  .S RGDFN=0 F  S RGDFN=$O(PAT(RGDFN)) Q:'RGDFN  D LOOP
 | 
|---|
| 89 |  G PRT
 | 
|---|
| 90 |  ;
 | 
|---|
| 91 | LOOP ;Loop on "B" xref of the AUDIT file
 | 
|---|
| 92 |  Q:'$D(^DPT(RGDFN,0))
 | 
|---|
| 93 |  I ANS2="S" D
 | 
|---|
| 94 |  . S PATNM=$P(^DPT(RGDFN,0),U)_U_RGDFN
 | 
|---|
| 95 |  . I '$O(^DIA(2,"B",RGDFN,0)) S ^TMP("RGMTAUDP2",$J,"NO AUDIT",PATNM)=" has no audit data available for any date."
 | 
|---|
| 96 |  S IEN=0 F  S IEN=$O(^DIA(2,"B",RGDFN,IEN)) Q:'IEN  D
 | 
|---|
| 97 |  .I $D(^DIA(2,IEN,0)) S IEN0=(^(0)),EDITDT=$P(IEN0,U,2) I EDITDT>RGBDT,EDITDT<STOP D
 | 
|---|
| 98 |  ..S FLD=$P(IEN0,U,3) I $D(FLD(FLD)) D
 | 
|---|
| 99 |  ...S USER=$P(IEN0,U,4)
 | 
|---|
| 100 |  ...I $D(USERSCRN) I USER'=USERSCRN Q
 | 
|---|
| 101 |  ...S PATNM=$P(^DPT(RGDFN,0),U)_U_RGDFN,^TMP("RGMTAUDP",$J,PATNM,EDITDT,IEN)=""
 | 
|---|
| 102 |  I ANS2="S" D
 | 
|---|
| 103 |  . I '$D(^TMP("RGMTAUDP",$J,PATNM)) S ^TMP("RGMTAUDP2",$J,"NO AUDIT",PATNM)=" has no audit data available for selected parameters."
 | 
|---|
| 104 |  Q
 | 
|---|
| 105 |  ;
 | 
|---|
| 106 | PRT ;Print report
 | 
|---|
| 107 |  S (PG,QFLG)=0,U="^",$P(LN,"-",81)="",SITE=$P($$SITE^VASITE(),U,2)
 | 
|---|
| 108 |  S PRGBDT=$$FMTE^XLFDT(RGBDT),PRGEDT=$$FMTE^XLFDT(RGEDT)
 | 
|---|
| 109 |  D NOW^%DTC S HDT=$$FMTE^XLFDT($E(%,1,12))
 | 
|---|
| 110 |  D HDR
 | 
|---|
| 111 |  I '$D(^TMP("RGMTAUDP",$J)) W !!,"No audit data found in this date range for specified parameters." G QUIT
 | 
|---|
| 112 |  S PATNM="@@@@" F  S PATNM=$O(^TMP("RGMTAUDP",$J,PATNM)) Q:PATNM=""  Q:QFLG  D
 | 
|---|
| 113 |  .D:$Y+4>IOSL HDR Q:QFLG
 | 
|---|
| 114 |  .W !!,"==> ",$P(PATNM,U),"  (DFN #",$P(PATNM,U,2),")"
 | 
|---|
| 115 |  .S EDITDT=0 F  S EDITDT=$O(^TMP("RGMTAUDP",$J,PATNM,EDITDT)) Q:QFLG  Q:'EDITDT  D
 | 
|---|
| 116 |  ..S IEN=0 F  S IEN=$O(^TMP("RGMTAUDP",$J,PATNM,EDITDT,IEN)) Q:QFLG  Q:'IEN  D
 | 
|---|
| 117 |  ...S PRTDT=$$FMTE^XLFDT($E(EDITDT,1,12))
 | 
|---|
| 118 |  ...S IEN0=^DIA(2,IEN,0)
 | 
|---|
| 119 |  ...K RGARR D FIELD^DID(2,$P(IEN0,U,3),"","LABEL","RGARR")
 | 
|---|
| 120 |  ...S FLD=$G(RGARR("LABEL"))  Q:FLD=""
 | 
|---|
| 121 |  ...S USER=$P(IEN0,U,4)
 | 
|---|
| 122 |  ...I 'USER S USER="UNKNOWN"
 | 
|---|
| 123 |  ...I USER'="UNKNOWN" S DIC="^VA(200,",DIC(0)="MZO",X="`"_USER D ^DIC S USER=$P(Y,"^",2)
 | 
|---|
| 124 |  ...S OLD=$G(^DIA(2,IEN,2)) I OLD']"" S OLD="<no previous value>"
 | 
|---|
| 125 |  ...S NEW=$G(^DIA(2,IEN,3)) I NEW']"" S NEW="<no current value>"
 | 
|---|
| 126 |  ...K OPTDA1,OPTDA2,OPTION,OPTNM I $G(^DIA(2,IEN,4.1)) D
 | 
|---|
| 127 |  ....S OPTDA1=+$P(^DIA(2,IEN,4.1),"^")
 | 
|---|
| 128 |  ....I OPTDA1 S DIC=19,DR=".01",DA=OPTDA1,DIQ(0)="EI",DIQ="OPTION" D EN^DIQ1 K DIC,DR,DA,DIQ S OPTION=$G(OPTION(19,OPTDA1,.01,"E"))
 | 
|---|
| 129 |  ....S OPTDA2=$P(^DIA(2,IEN,4.1),"^",2)
 | 
|---|
| 130 |  ....I $P(OPTDA2,";",2)="ORD(101," S DIC=101,DR=".01",DA=+OPTDA2,DIQ(0)="EI",DIQ="OPTION" D EN^DIQ1 K DIC,DR,DA,DIQ S OPTNM=$G(OPTION(101,+OPTDA2,.01,"E")) Q
 | 
|---|
| 131 |  ....I +OPTDA2 S DIC=19,DR=".01",DA=+OPTDA2,DIQ(0)="EI",DIQ="OPTION" D EN^DIQ1 K DIC,DR,DA,DIQ S OPTNM=$G(OPTION(19,+OPTDA2,.01,"E")) Q
 | 
|---|
| 132 |  ...D:$Y+5>IOSL HDR Q:QFLG  W !!,PRTDT,?20,FLD,?51,USER,!?20,OLD," / ",NEW
 | 
|---|
| 133 |  ...I $G(OPTION)'="" W !?3,OPTION I $G(OPTNM)'="" W "/",OPTNM
 | 
|---|
| 134 |  I $D(^TMP("RGMTAUDP2",$J,"NO AUDIT")) D
 | 
|---|
| 135 |  . S PATNM="@@@@",RGNAUD="" F  S PATNM=$O(^TMP("RGMTAUDP2",$J,"NO AUDIT",PATNM)) Q:PATNM=""  D
 | 
|---|
| 136 |  .. Q:QFLG
 | 
|---|
| 137 |  .. S RGNAUD=$P(^TMP("RGMTAUDP2",$J,"NO AUDIT",PATNM),U)
 | 
|---|
| 138 |  .. W !!,"==> ",$P(PATNM,U),"  (DFN #",$P(PATNM,U,2),")"_RGNAUD
 | 
|---|
| 139 |  ;
 | 
|---|
| 140 | QUIT ;
 | 
|---|
| 141 |  I $E(IOST,1,2)="C-"&('QFLG) S DIR(0)="E" D  D ^DIR K DIR
 | 
|---|
| 142 |  .S SS=22-$Y F JJ=1:1:SS W !
 | 
|---|
| 143 |  K ^TMP("RGMTAUDP",$J),^TMP("RGMTAUDP2",$J)
 | 
|---|
| 144 |  K %,%I,ANS1,ANS2,C,CNT,RGDFN,DIR,DIRUT,DTOUT,DUOUT,EDITDT,FLD,FLDLP,FLDNM,HDR
 | 
|---|
| 145 |  K HDT,IEN,IEN0,JJ,LN,NEW,OLD,OPTDA1,OPTDA2,OPTION,OPTNM,PAT,PATNM,PG,PRGBDT,PRGEDT,PRTDT,QFLG,QQ,RGARR,RGBDT,RGNAUD
 | 
|---|
| 146 |  K RGEDT,RGERR,SITE,SS,STOP,USER,X,Y,ZTSK
 | 
|---|
| 147 |  D ^%ZISC S:$D(ZTQUEUED) ZTREQ="@" Q
 | 
|---|
| 148 |  ;
 | 
|---|
| 149 | HDR ;HEADER
 | 
|---|
| 150 |  I $E(IOST,1,2)="C-" S SS=22-$Y F JJ=1:1:SS W !
 | 
|---|
| 151 |  I $E(IOST,1,2)="C-",PG>0 S DIR(0)="E" W ! D ^DIR K DIR I 'Y S QFLG=1 Q
 | 
|---|
| 152 |  S PG=PG+1 W:$Y!($E(IOST,1,2)="C-") @IOF
 | 
|---|
| 153 |  W !,"PATIENT AUDIT LIST at ",SITE," on ",HDT,?72,"Page: ",PG
 | 
|---|
| 154 |  W !,"Date Range: ",PRGBDT," to ",PRGEDT
 | 
|---|
| 155 |  W !!,"Date/Time Edited",?20,"Field Edited",?51,"Edited By",!?20,"Old Value / New Value"
 | 
|---|
| 156 |  W !?3,"Option/Protocol",!,LN
 | 
|---|
| 157 |  Q
 | 
|---|
| 158 |  ;
 | 
|---|
| 159 | FLDLIST ;Help for Field # List
 | 
|---|
| 160 |  K RG N DIR S QFLG=0 I RGERR W $C(7)," ??"
 | 
|---|
| 161 |  S HDR="Select a FIELD NUMBER from the audited field(s) in the PATIENT file:"
 | 
|---|
| 162 |  W @IOF,HDR,!
 | 
|---|
| 163 |  S FLDLP=0 F  S FLDLP=$O(^DD(2,"AUDIT",FLDLP)) Q:'FLDLP  Q:QFLG  D
 | 
|---|
| 164 |  .I $Y+6>IOSL D  Q:QFLG
 | 
|---|
| 165 |  ..S DIR(0)="E" W ! D ^DIR K DIR I 'Y S QFLG=1 Q
 | 
|---|
| 166 |  ..E  W @IOF,HDR,!
 | 
|---|
| 167 |  .K RGARR D FIELD^DID(2,FLDLP,"","LABEL","RGARR")
 | 
|---|
| 168 |  .S FLDNM=$G(RGARR("LABEL")) Q:FLDNM=""
 | 
|---|
| 169 |  .W !,FLDLP,?13,FLDNM
 | 
|---|
| 170 |  Q
 | 
|---|