Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: VAFCAUD

VAFCAUD.m

Go to the documentation of this file.
  1. VAFCAUD ;BIR/CML-MPI/PD AUDIT FILE PRINT FOR A SPECIFIED PATIENT ;20 May 2013 2:25 PM
  1. ;;5.3;Registration;**477,712,863**;Aug 13, 1993;Build 2
  1. ;Reference to ^DIA(2 and data derived from the AUDIT file (#1.1)
  1. ;is supported by IA #2097 and #2602.
  1. ;Reference to ^ORD(101 supported by IA #2596
  1. S QFLG=1
  1. S RPCFLG=0 ;is this from an rpc call
  1. BEGIN ;
  1. W !!,"This option prints information from the AUDIT file (#1.1) for a"
  1. W !,"selected patient and date range."
  1. W !!,"For the PATIENT file (#2) entry selected, the report prints the"
  1. W !,"patient name and DFN, date/time the field was edited, the user who"
  1. W !,"made the change, the field edited, the old value, and the new value."
  1. W !,"The option or protocol (if available) will also be displayed."
  1. D ASK1
  1. I $G(VAFCDFN) D ASK2
  1. I $G(VAFCBDT),$G(VAFCEDT) D DEV
  1. G QUIT
  1. ;
  1. ASK1 ;Ask for PATIENT
  1. W !
  1. S DIC="^DPT(",DIC(0)="QEAM",DIC("A")="Select PATIENT: " D ^DIC K DIC Q:Y<0 S VAFCDFN=+Y
  1. ;
  1. DSP ;Display if audit data is available - **863 MVI_2039 (cml) new subroutine added to pick up audit data for multiple subfields
  1. S (GOT,EARLY,EARLYM)=0,EARLYDT=""
  1. S PTNM=$P(^DPT(VAFCDFN,0),"^")
  1. ;check top level audits
  1. S IEN=0 F S IEN=$O(^DIA(2,"B",VAFCDFN,IEN)) Q:'IEN D
  1. .I $D(^DIA(2,IEN,0)) S EDITDT=$P(^(0),"^",2),GOT=1 S:EARLY=0 EARLY=EDITDT S:EDITDT<EARLY EARLY=EDITDT
  1. ;check multiple level
  1. S DFNMULT=VAFCDFN_",0" F S DFNMULT=$O(^DIA(2,"B",DFNMULT)) Q:DFNMULT="" Q:$P(DFNMULT,",")'=VAFCDFN I $D(^DIA(2,"B",DFNMULT)) D
  1. .S IEN=0 F S IEN=$O(^DIA(2,"B",DFNMULT,IEN)) Q:'IEN I $D(^DIA(2,IEN,0)) S EDITDT=$P(^(0),"^",2),GOT=1 S:EARLYM=0 EARLYM=EDITDT S:EDITDT<EARLYM EARLYM=EDITDT
  1. ;
  1. I 'GOT W !!,"There is no audit data available for any date for ",PTNM,"." G ASK1
  1. I EARLYM=0,EARLY>0 S EARLYDT=EARLY
  1. I EARLY=0,EARLYM>0 S EARLYDT=EARLYM
  1. I EARLY>0,EARLYM>EARLY S EARLYDT=EARLY
  1. I EARLYM>0,EARLY>EARLYM S EARLYDT=EARLYM
  1. W !!,"The earliest audit data is "_$$FMTE^XLFDT(EARLYDT)_"."
  1. Q
  1. ;
  1. ASK2 ;Ask for Date Range
  1. ;I '$D(VAFCDFN)&($D(DFN)) S VAFCDFN=DFN
  1. W !!,"Enter date range for data to be included in report."
  1. K DIR,DIRUT,DTOUT,DUOUT
  1. S DIR(0)="DAO^:DT:EPX",DIR("A")="Beginning Date: " D ^DIR K DIR Q:$D(DIRUT) S VAFCBDT=Y
  1. S DIR(0)="DAO^"_VAFCBDT_":DT:EPX",DIR("A")="Ending Date: " D ^DIR K DIR Q:$D(DIRUT) S VAFCEDT=Y
  1. Q
  1. ;
  1. DEV W !!,"The right margin for this report is 80.",!!
  1. S ZTSAVE("VAFCBDT")="",ZTSAVE("VAFCEDT")="",ZTSAVE("VAFCDFN")=""
  1. D EN^XUTMDEVQ("START^VAFCAUD(VAFCDFN,VAFCBDT,VAFCEDT,RPCFLG)","MPI/PD - Print AUDIT File Data for a Specific Patient",.ZTSAVE) I 'POP Q
  1. W !,"NO DEVICE SELECTED OR REPORT PRINTED!!"
  1. G QUIT
  1. ;
  1. START(VAFCDFN,VAFCBDT,VAFCEDT,RPCFLG) ;
  1. N IEN
  1. K ^TMP("VAFCAUD",$J)
  1. ;
  1. LOOP ;Loop on "B" xref of the AUDIT file
  1. S STOP=VAFCEDT+1
  1. S IEN=0 F S IEN=$O(^DIA(2,"B",VAFCDFN,IEN)) Q:'IEN D
  1. .I $D(^DIA(2,IEN,0)) S EDITDT=$P(^(0),U,2) I EDITDT>VAFCBDT,EDITDT<STOP D
  1. ..S ^TMP("VAFCAUD",$J,EDITDT,IEN)=""
  1. ;
  1. ;find any audit data for audited fields that are multiples - **863 MVI_2039 (cml)
  1. S DFNMULT=VAFCDFN_",0" F S DFNMULT=$O(^DIA(2,"B",DFNMULT)) Q:DFNMULT="" Q:$P(DFNMULT,",")'=VAFCDFN I $D(^DIA(2,"B",DFNMULT)) D
  1. .S IEN=0 F S IEN=$O(^DIA(2,"B",DFNMULT,IEN)) Q:'IEN D
  1. ..I $D(^DIA(2,IEN,0)) S EDITDT=$P(^(0),"^",2) I EDITDT>VAFCBDT,EDITDT<STOP S ^TMP("VAFCAUD",$J,EDITDT,IEN)=""
  1. ; ****863 MVI_2039 (cml) changes stop here
  1. ;
  1. PRT ;Print report
  1. S (PG,QFLG)=0,U="^",$P(LN,"-",81)="",SITE=$P($$SITE^VASITE(),U,2)
  1. S PVAFCBDT=$$FMTE^XLFDT(VAFCBDT),PVAFCEDT=$$FMTE^XLFDT(VAFCEDT)
  1. D NOW^%DTC S HDT=$$FMTE^XLFDT($E(%,1,12))
  1. D HDR
  1. I '$O(^TMP("VAFCAUD",$J,0)) W !!,"No audit data found in this date range for this patient." Q
  1. S EDITDT=0 F S EDITDT=$O(^TMP("VAFCAUD",$J,EDITDT)) Q:QFLG Q:'EDITDT D
  1. .S IEN=0 F S IEN=$O(^TMP("VAFCAUD",$J,EDITDT,IEN)) Q:QFLG Q:'IEN D
  1. ..S PRTDT=$$FMTE^XLFDT($E(EDITDT,1,12))
  1. ..S IEN0=^DIA(2,IEN,0)
  1. ..S FILE=2,FIELD=$P(IEN0,"^",3) I FIELD["," S FILE=+$P($G(^DD(2,$P(FIELD,","),0)),"^",2) Q:'FILE S FIELD=$P(FIELD,",",2) ;**863 MVI_2039 (cml)
  1. ..K VAFCARR1 D FIELD^DID(FILE,FIELD,"","LABEL","VAFCARR1") ;**712, **863 MVI_2039 (cml)
  1. ..S FLD=$G(VAFCARR1("LABEL")) Q:FLD=""
  1. ..S USER=$P(IEN0,U,4)
  1. ..I 'USER S USER="UNKNOWN"
  1. ..I USER'="UNKNOWN" S DIC="^VA(200,",DIC(0)="MZO",X="`"_USER D ^DIC S USER=$P(Y,"^",2)
  1. ..S OLD=$G(^DIA(2,IEN,2)) I OLD']"" S OLD="<no previous value>"
  1. ..S NEW=$G(^DIA(2,IEN,3)) I NEW']"" S NEW="<no current value>"
  1. ..K OPTDA1,OPTDA2,VAFCOPTN,OPTNM I $G(^DIA(2,IEN,4.1)) D
  1. ...S OPTDA1=+$P(^DIA(2,IEN,4.1),"^")
  1. ...I OPTDA1 S DIC=19,DR=".01",DA=OPTDA1,DIQ(0)="EI",DIQ="VAFCOPTN" D EN^DIQ1 K DIC,DR,DA,DIQ S VAFCOPTN=$G(VAFCOPTN(19,OPTDA1,.01,"E"))
  1. ...S OPTDA2=$P(^DIA(2,IEN,4.1),"^",2)
  1. ...I $P(OPTDA2,";",2)="ORD(101," S DIC=101,DR=".01",DA=+OPTDA2,DIQ(0)="EI",DIQ="VAFCOPTN" D EN^DIQ1 K DIC,DR,DA,DIQ S OPTNM=$G(VAFCOPTN(101,+OPTDA2,.01,"E")) Q
  1. ...I +OPTDA2 S DIC=19,DR=".01",DA=+OPTDA2,DIQ(0)="EI",DIQ="VAFCOPTN" D EN^DIQ1 K DIC,DR,DA,DIQ S OPTNM=$G(VAFCOPTN(19,+OPTDA2,.01,"E")) Q
  1. ..I 'RPCFLG D:$Y+4>IOSL HDR Q:QFLG
  1. ..W !,PRTDT,?20,FLD,?51,USER,!?20,OLD," / ",NEW
  1. ..I $G(VAFCOPTN)'="" W !?3,VAFCOPTN
  1. ..I $G(OPTNM)'="" W:$G(VAFCOPTN)="" !?3 W "/",$G(OPTNM)
  1. ..W !
  1. Q
  1. ;
  1. QUIT ;
  1. I '$G(RPCFLG),$E(IOST,1,2)="C-"&('$G(QFLG)) S DIR(0)="E" D D ^DIR K DIR
  1. .S SS=22-$Y F JJ=1:1:SS W !
  1. I '$G(RPCFLG) D ^%ZISC S:$D(ZTQUEUED) ZTREQ="@"
  1. K ^TMP("VAFCAUD",$J)
  1. K %,%I,C,VAFCDFN,EDITDT,FLD,HDT,IEN,IEN0,JJ,LN,NEW,OLD,OPTDA1,OPTDA2,VAFCOPTN,OPTNM,PG,PVAFCBDT,PVAFCEDT,PRTDT,POP
  1. K QFLG,VAFCARR1,VAFCBDT,VAFCEDT,RPCFLG,SITE,SS,STOP,USER,X,Y,ZTSK
  1. K SUB,FILE,FIELD,QQ,DFNMULT,EARLY,EARLYDT,EARLYM,GOT,PTNM ;**712, **863 MVI_2039 (cml)
  1. Q
  1. ;
  1. HDR ;HEADER
  1. I 'RPCFLG I $E(IOST,1,2)="C-" S SS=22-$Y F JJ=1:1:SS W !
  1. I 'RPCFLG I $E(IOST,1,2)="C-",PG>0 S DIR(0)="E" W ! D ^DIR K DIR I 'Y S QFLG=1 Q
  1. S PG=PG+1
  1. I 'RPCFLG W:$Y!($E(IOST,1,2)="C-") @IOF
  1. W !,"PATIENT AUDIT LIST at ",SITE," on ",HDT,?70,"Page: ",PG
  1. W !,"Patient: ",$P(^DPT(VAFCDFN,0),U)," (DFN #",VAFCDFN,")"
  1. W !,"Date Range: ",PVAFCBDT," to ",PVAFCEDT
  1. W !!,"Date/Time Edited",?20,"Field Edited",?51,"Edited By"
  1. W !?20,"Old Value / New Value",!?3,"Option/Protocol",!,LN
  1. Q