SDECAUD  ;ALB/WTC,JDJ - VISTA SCHEDULING - Audit Statistics Compiler ; JULY 1, 2024
 ;;5.3;Scheduling;**686,885**;Aug 13, 1993;Build 5
 ;;Per VHA Directive 6402, this routine should not be modified
    ;
    Q  ;
    ;
BKGND   ;
    ;
    ;  Compile statistics for yesterday.
    ;
    D COMPILE() ;
    Q  ;
    ;
SELECT  ;
    ;
    ;  Compile statistics for selected date or range of dates.
    ;
    N DATE,DATE1,DATE2,%DT,Y,I,X1,X2,X,TODAY ;
    ;
    D NOW^%DTC S TODAY=X ;
    W !,"Compile audit statistics for a date or date range.",! ;
SELECT1 ;
    S %DT="AEX",%DT("A")="Begin date: " D ^%DT Q:Y<0  I Y'<TODAY W "...Must be earlier than today.",! G SELECT1 ;
    S DATE1=Y ;
SELECT2 ;
    S %DT="AEX",%DT("A")="End date: " D ^%DT Q:Y<0  I Y'<TODAY W "...Must be earlier than today.",! G SELECT2 ;
    S DATE2=Y ;
    I DATE1>DATE2 W "... Dates entered out of sequence.  Re-enter.",! G SELECT ;
    ;
    ;  Compile data for each date in range but skip a date if compile previously run for that date.
    ;
    F I=0:1 S X1=DATE1,X2=I D C^%DTC S DATE=X Q:DATE>DATE2  D  ;
    . W ! S Y=DATE D DD^%DT W Y ;
    . I $D(^SDAUDIT("C",DATE)) W "...previously compiled.  Skipped." Q  ;
    . D COMPILE(DATE) W "...compiled." ;
    Q  ;
    ;
COMPILE(DATE)   ;
    ;
    ;  Compile audit statistics for a date.  If date not specified, use yesterday.
    ;
    K ^TMP($J) ;
    N D1,CLERK,DA,X,TYPE,MRTC,APPTDATE,STATUS,PIECE,GLOBAL,DIC,DA1,DLAYGO,FLD,D2,PTR ;
    ;
    I $G(DATE)="" S DATE=$$HTFM^XLFDT($H-1,1) ;
    ;
    ;  Do not compile if done previously.
    ;
    I $D(^SDAUDIT("C",DATE)) Q  ;
    ;
    ;  Loop thru date/user cross-reference in the SDEC APPT REQUEST file (#409.85) and count APPT and MRTC Requests opened.
    ;
    S D1=DATE-.001 F  S D1=$O(^SDEC(409.85,"AC",D1)) Q:'D1  Q:D1\1'=DATE  D  ;
    .   ;
    .   S CLERK=0 F  S CLERK=$O(^SDEC(409.85,"AC",D1,CLERK)) Q:'CLERK  D  ;
    ..  ;
    ..  ; Initialize statistics counters for the user.
    ..  ;
    ..  I '$D(^TMP($J,CLERK,DATE)) S ^TMP($J,CLERK,DATE)="0^0^0^0^0^0^0^0^0^0^0^0^0" ;
    ..  ;
    ..  S DA=0 F  S DA=$O(^SDEC(409.85,"AC",D1,CLERK,DA)) Q:'DA  S X=^SDEC(409.85,DA,0) D  ;
    ... ;
    ... ;  Parse request data
    ... ;
    ... S TYPE=$P(X,"^",5),APPTDATE=$P(X,"^",23),STATUS=$P(X,"^",17) ;
    ... S MRTC=+$P($G(^SDEC(409.85,DA,3)),"^",1) ;
    ... ;
    ... ;  APPT request made
    ... ;
    ... I TYPE="APPT",MRTC=0 S $P(^(DATE),"^",2)=$P(^TMP($J,CLERK,DATE),"^",2)+1 ;
    ... ;
    ... ;  MRTC request
    ... ;
    ... I MRTC=1 S $P(^(DATE),"^",5)=$P(^TMP($J,CLERK,DATE),"^",5)+1 ;
    ;
    ;    Loop thru date/user cross-reference in the RECALL REMINDERS file (#403.5) and count PtCSch entries added.
    ;
    S D1=DATE-.001 F  S D1=$O(^SD(403.5,"AC",D1)) Q:'D1  Q:D1\1'=DATE  D  ;
    .   ;
    .   S CLERK=0 F  S CLERK=$O(^SD(403.5,"AC",D1,CLERK)) Q:'CLERK  D  ;
    ..  ;
    ..  I '$D(^TMP($J,CLERK,DATE)) S ^TMP($J,CLERK,DATE)="0^0^0^0^0^0^0^0^0^0^0^0^0" ;
    ..  S $P(^(DATE),"^",10)=$P(^TMP($J,CLERK,DATE),"^",10)+1 ;
    ;
    ;    Loop thru date/user cross-reference in the SD WAIT LIST file (#409.3) and count EWL entries made.
    ;
    S D1=DATE-.001 F  S D1=$O(^SDWL(409.3,"AC",D1)) Q:'D1  Q:D1\1'=DATE  D  ;
    .   ;
    .   S CLERK=0 F  S CLERK=$O(^SDWL(409.3,"AC",D1,CLERK)) Q:'CLERK  D  ;
    ..  ;
    ..  I '$D(^TMP($J,CLERK,DATE)) S ^TMP($J,CLERK,DATE)="0^0^0^0^0^0^0^0^0^0^0^0^0" ;
    ..  S $P(^(DATE),"^",7)=$P(^TMP($J,CLERK,DATE),"^",7)+1 ;
    ;
    ;   Loop thru date appointment made cross-reference in the SDEC APPOINTMENT file (#409.84) and count appointments
    ;   made by type (EWL, Consult, PtCSch, APPT).  Increment request closed for each appointment made.
    S D1=DATE-.001 F  S D1=$O(^SDEC(409.84,"AC",D1)) Q:'D1  Q:D1\1'=DATE  D
    .S DA=0 F  S DA=$O(^SDEC(409.84,"AC",D1,DA)) Q:'DA  S CLERK=$P(^SDEC(409.84,DA,0),"^",8),TYPE=$P($G(^SDEC(409.84,DA,2)),"^",1) D  ;
    ..   Q:CLERK=""  ;  Skip if data missing
    ..   S PIECE=$S($P(TYPE,";",2)="SDWL(409.3,":8,$P(TYPE,";",2)="GMR(123,":12,$P(TYPE,";",2)="SD(403.5,":11,$P(TYPE,";",2)="SDEC(409.85,":3,1:0) ;
    ..   Q:'PIECE  ;
 ..   S D2=$P(D1,".",1) ;GRAB THE DATE PORTION
    ..   I '$D(^TMP($J,CLERK,D2)) S ^TMP($J,CLERK,D2)="0^0^0^0^0^0^0^0^0^0^0^0^0" ;
    ..   ;
    ..   ;  Update appointment made.
    ..   ;
    ..   S $P(^TMP($J,CLERK,D2),"^",PIECE)=$P(^TMP($J,CLERK,D2),"^",PIECE)+1 ;
    ..  ;
    ..  ;  Update APPT or EWL request closed.
    ..   ;
    ..  S PIECE=$S($P(TYPE,";",2)="SDWL(409.3,":9,$P(TYPE,";",2)="SDEC(409.85,":4,1:0) Q:'PIECE  ;
    ..   ;
    ..   ;  Determine if APPT request is MRTC
    ..   ;
    ..   I $P(TYPE,";",2)="SDEC(409.85," S PTR=$P(TYPE,";",1),MRTC=+$P($G(^SDEC(409.85,PTR,3)),"^",1) I MRTC S PIECE=6 ;
    ..   ;
    ..   ;  Update request closed
    ..   ;
    ..   S $P(^TMP($J,CLERK,D2),"^",PIECE)=$P(^TMP($J,CLERK,D2),"^",PIECE)+1 ;
    ;
    ;    Loop thru date appointment cancelled cross-reference in the SDEC APPOINTMENT file (#409.84) and count cancellations.
    ;
    S D1=DATE-.001 F  S D1=$O(^SDEC(409.84,"AD",D1)) Q:'D1  Q:D1\1'=DATE  D  ;
    .   ;
    .   S DA=0 F  S DA=$O(^SDEC(409.84,"AD",D1,DA)) Q:'DA  S CLERK=$P(^SDEC(409.84,DA,0),"^",21) D  ;
    ..  ;
    ..  Q:CLERK=""  ;  Skip if data is missing
    ..  ;
    ..  I '$D(^TMP($J,CLERK,DATE)) S ^TMP($J,CLERK,DATE)="0^0^0^0^0^0^0^0^0^0^0^0^0" ;
    ..  S $P(^(DATE),"^",13)=$P(^TMP($J,CLERK,DATE),"^",13)+1 ;
    ;
    ;    Loop thru date/time-user cross-reference in SDEC CONTACTS file (#409.86) and count contacts.
    ;
    S D1=DATE-.001 F  S D1=$O(^SDEC(409.86,"AD",D1)) Q:'D1  Q:D1\1'=DATE  D  ;
    .   ;
    .   S CLERK=0 F  S CLERK=$O(^SDEC(409.86,"AD",D1,CLERK)) Q:'CLERK  D  ;
    ..  ;
    ..  S DA=0 F  S DA=$O(^SDEC(409.86,"AD",D1,CLERK,DA)) Q:'DA  D  ;
    ... S DA1=0 F  S DA1=$O(^SDEC(409.86,"AD",D1,CLERK,DA,DA1)) Q:'DA1  D  ;
    ....    I '$D(^TMP($J,CLERK,DATE)) S ^TMP($J,CLERK,DATE)="0^0^0^0^0^0^0^0^0^0^0^0^0" ;
    ....    S $P(^(DATE),"^",1)=$P(^TMP($J,CLERK,DATE),"^",1)+1 ;
    ;
    ;
    ;  Update the SD Audit Statistics file (#409.97)
    ;
    S GLOBAL=^DIC(409.97,0,"GL") ;
    S CLERK=0 F  S CLERK=$O(^TMP($J,CLERK)) Q:'CLERK  D  ;
    .   ;
    .   K DO S DIC=GLOBAL,DIC(0)="FL",DLAYGO="409.97",X=CLERK,DIC("DR")="1////"_DATE ;
    .   F FLD=2:1:14 S DIC("DR")=DIC("DR")_";"_FLD_"////"_$P(^TMP($J,CLERK,DATE),"^",FLD-1) ;
    .   D FILE^DICN ;
    ;
    K ^TMP($J) ;
    ;
    Q  ;
    ;
    ;*zeb+tag 2/28/18 686 return compiled data
    ;--------------------
    ;SUMMGET2 - Return compiled Audit Report data via RPC
    ;--------------------
    ;Parameters
    ;----------
    ;SDECRET - global reference to array with return values
    ;SDBEG   - start date for reporting; defaults to 1/2/1841
    ;SDEND   - end date for reporting; defaults to 10/15/2114
    ;USER    - IEN of a user to report on; defaults to all users
    ;----------
    ;Returns (one row for each user)
    ;----------
    ;USERIEN  - user's IEN
    ;USERNAME - user's name
    ;CONTACTS - number of patient contacts
    ;APPTOPEN - number of APPT requests opened
    ;APPTMADE - number of appointments made for APPT requests
    ;APPTCLSD - number of APPT requests closed
    ;MRTCOPEN - number of MRTC requests opened
    ;MRTCCLSD - number of MRTC requests closed
    ;EWLOPEN  - number of EWL requests opened
    ;EWLMADE  - number of appointments made for EWL requests
    ;EWLCLSD  - number of EWL requests closed
    ;PTCSOPEN - number of PtCSch requests opened
    ;PTCSMADE - number of appointments made for PtCSch requests
    ;CNSLTMD  - number of appointments made for consults
    ;APPTCXLD - number of appointments canceled
    ;ACTIONS  - total number of actions
SUMMGET2(SDECRET,SDBEG,SDEND,USER)  ;Get compiled Audit Report for a given date range
 N X,Y,%DT,U,X1,X2
 N SDTMP,SDECLN,SDSTATS,SDPC,SDDT,SDASIEN,SDASDATA
 S U="^"
 ;translate dates to FM format
 I SDBEG]"" S %DT="" S X=$P(SDBEG,"@",1) D ^%DT S SDBEG=Y S:Y=-1 SDBEG=1410102 I 1
 E  S SDBEG=1410102 ;default begin date
 I SDEND]"" S %DT="" S X=$P(SDEND,"@",1) D ^%DT S SDEND=Y S:Y=-1 SDEND=4141015 I 1
 E  S SDEND=4141015 ;default end date
 ;check user
 I USER]"",'$D(^VA(200,+USER,0)) S USER=""
 ;set up return array
 S SDECRET="^TMP(""SDECAUD"","_$J_",""SUMMGET2"")"  ;global reference to return array
 K @SDECRET
 S SDECLN=0
 ;set up column headers for return array
 ;              1             2              3              4               5             6
 S SDTMP="T00030USERIEN^T00030USERNAME^T00030CONTACTS^T00030APPTOPEN^T00030APPTMADE^T00030APPTCLSD"
 ;                     7              8              9             10            11
 S SDTMP=SDTMP_"^T00030MRTCOPEN^T00030MRTCCLSD^T00030EWLOPEN^T00030EWLMADE^T00030EWLCLSD"
 ;                     12             13             14            15             16
 S SDTMP=SDTMP_"^T00030PTCSOPEN^T00030PTCSMADE^T00030CNSLTMD^T00030APPTCXLD^T00030ACTIONS"
 S @SDECRET@(SDECLN)=SDTMP_$C(30)
 ;if a single user is specified, loop over x-ref for dates for that user
 I USER]"" D  I 1
 .S SDSTATS="0^0^0^0^0^0^0^0^0^0^0^0^0^0"
 .S X1=SDBEG,X2=-1 D C^%DTC S SDDT=X
 .F  S SDDT=$O(^SDAUDIT("E",USER,SDDT)) Q:SDDT=""  Q:SDDT>SDEND  D
 ..S SDASIEN=""
 ..F  S SDASIEN=$O(^SDAUDIT("E",USER,SDDT,SDASIEN)) Q:SDASIEN=""  D
 ...S SDASDATA=^SDAUDIT(SDASIEN,0)
 ...S $P(SDASDATA,U,16)=$$GET1^DIQ(409.97,SDASIEN_",",15) ;field 15 is computed, so isn't in global
 ...F SDPC=1:1:14 S $P(SDSTATS,U,SDPC)=$P(SDSTATS,U,SDPC)+$P(SDASDATA,U,SDPC+2)
 .S SDECLN=SDECLN+1
 .S SDTMP=USER_U_$$GET1^DIQ(200,USER_",",.01)_U_SDSTATS
 .S @SDECRET@(SDECLN)=SDTMP_$C(30)
 ;otherwise, loop over x-ref for users for those dates
 E  D
 .F  S USER=$O(^SDAUDIT("E",USER)) Q:USER=""  D
 ..S SDSTATS="0^0^0^0^0^0^0^0^0^0^0^0^0^0"
 ..S X1=SDBEG,X2=-1 D C^%DTC S SDDT=X
 ..F  S SDDT=$O(^SDAUDIT("E",USER,SDDT)) Q:SDDT=""  Q:SDDT>SDEND  D
 ...S SDASIEN=""
 ...F  S SDASIEN=$O(^SDAUDIT("E",USER,SDDT,SDASIEN)) Q:SDASIEN=""  D
 ....S SDASDATA=^SDAUDIT(SDASIEN,0)
 ....S $P(SDASDATA,U,16)=$$GET1^DIQ(409.97,SDASIEN_",",15) ;field 15 is computed, so isn't in global
 ....F SDPC=1:1:14 S $P(SDSTATS,U,SDPC)=$P(SDSTATS,U,SDPC)+$P(SDASDATA,U,SDPC+2)
 ..Q:SDSTATS="0^0^0^0^0^0^0^0^0^0^0^0^0^0"  ;don't send back if user has no data to send
 ..S SDECLN=SDECLN+1
 ..S SDTMP=USER_U_$$GET1^DIQ(200,USER_",",.01)_U_SDSTATS
 ..S @SDECRET@(SDECLN)=SDTMP_$C(30)
 Q
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HSDECAUD   10615     printed  Sep 23, 2025@20:28:14                                                                                                                                                                                                    Page 2
SDECAUD   ;ALB/WTC,JDJ - VISTA SCHEDULING - Audit Statistics Compiler ; JULY 1, 2024
 +1       ;;5.3;Scheduling;**686,885**;Aug 13, 1993;Build 5
 +2       ;;Per VHA Directive 6402, this routine should not be modified
 +3       ;
 +4       ;
           QUIT 
 +5       ;
BKGND     ;
 +1       ;
 +2       ;  Compile statistics for yesterday.
 +3       ;
 +4       ;
           DO COMPILE()
 +5       ;
           QUIT 
 +6       ;
SELECT    ;
 +1       ;
 +2       ;  Compile statistics for selected date or range of dates.
 +3       ;
 +4       ;
           NEW DATE,DATE1,DATE2,%DT,Y,I,X1,X2,X,TODAY
 +5       ;
 +6       ;
           DO NOW^%DTC
           SET TODAY=X
 +7       ;
           WRITE !,"Compile audit statistics for a date or date range.",!
SELECT1   ;
 +1       ;
           SET %DT="AEX"
           SET %DT("A")="Begin date: "
           DO ^%DT
           if Y<0
               QUIT 
           IF Y'<TODAY
               WRITE "...Must be earlier than today.",!
               GOTO SELECT1
 +2       ;
           SET DATE1=Y
SELECT2   ;
 +1       ;
           SET %DT="AEX"
           SET %DT("A")="End date: "
           DO ^%DT
           if Y<0
               QUIT 
           IF Y'<TODAY
               WRITE "...Must be earlier than today.",!
               GOTO SELECT2
 +2       ;
           SET DATE2=Y
 +3       ;
           IF DATE1>DATE2
               WRITE "... Dates entered out of sequence.  Re-enter.",!
               GOTO SELECT
 +4       ;
 +5       ;  Compile data for each date in range but skip a date if compile previously run for that date.
 +6       ;
 +7       ;
           FOR I=0:1
               SET X1=DATE1
               SET X2=I
               DO C^%DTC
               SET DATE=X
               if DATE>DATE2
                   QUIT 
               Begin DoDot:1
 +8       ;
                   WRITE !
                   SET Y=DATE
                   DO DD^%DT
                   WRITE Y
 +9       ;
                   IF $DATA(^SDAUDIT("C",DATE))
                       WRITE "...previously compiled.  Skipped."
                       QUIT 
 +10      ;
                   DO COMPILE(DATE)
                   WRITE "...compiled."
               End DoDot:1
 +11      ;
           QUIT 
 +12      ;
COMPILE(DATE) ;
 +1       ;
 +2       ;  Compile audit statistics for a date.  If date not specified, use yesterday.
 +3       ;
 +4       ;
           KILL ^TMP($JOB)
 +5       ;
           NEW D1,CLERK,DA,X,TYPE,MRTC,APPTDATE,STATUS,PIECE,GLOBAL,DIC,DA1,DLAYGO,FLD,D2,PTR
 +6       ;
 +7       ;
           IF $GET(DATE)=""
               SET DATE=$$HTFM^XLFDT($HOROLOG-1,1)
 +8       ;
 +9       ;  Do not compile if done previously.
 +10      ;
 +11      ;
           IF $DATA(^SDAUDIT("C",DATE))
               QUIT 
 +12      ;
 +13      ;  Loop thru date/user cross-reference in the SDEC APPT REQUEST file (#409.85) and count APPT and MRTC Requests opened.
 +14      ;
 +15      ;
           SET D1=DATE-.001
           FOR 
               SET D1=$ORDER(^SDEC(409.85,"AC",D1))
               if 'D1
                   QUIT 
               if D1\1'=DATE
                   QUIT 
               Begin DoDot:1
 +16      ;
 +17      ;
                   SET CLERK=0
                   FOR 
                       SET CLERK=$ORDER(^SDEC(409.85,"AC",D1,CLERK))
                       if 'CLERK
                           QUIT 
                       Begin DoDot:2
 +18      ;
 +19      ; Initialize statistics counters for the user.
 +20      ;
 +21      ;
                           IF '$DATA(^TMP($JOB,CLERK,DATE))
                               SET ^TMP($JOB,CLERK,DATE)="0^0^0^0^0^0^0^0^0^0^0^0^0"
 +22      ;
 +23      ;
                           SET DA=0
                           FOR 
                               SET DA=$ORDER(^SDEC(409.85,"AC",D1,CLERK,DA))
                               if 'DA
                                   QUIT 
                               SET X=^SDEC(409.85,DA,0)
                               Begin DoDot:3
 +24      ;
 +25      ;  Parse request data
 +26      ;
 +27      ;
                                   SET TYPE=$PIECE(X,"^",5)
                                   SET APPTDATE=$PIECE(X,"^",23)
                                   SET STATUS=$PIECE(X,"^",17)
 +28      ;
                                   SET MRTC=+$PIECE($GET(^SDEC(409.85,DA,3)),"^",1)
 +29      ;
 +30      ;  APPT request made
 +31      ;
 +32      ;
                                   IF TYPE="APPT"
                                       IF MRTC=0
                                           SET $PIECE(^(DATE),"^",2)=$PIECE(^TMP($JOB,CLERK,DATE),"^",2)+1
 +33      ;
 +34      ;  MRTC request
 +35      ;
 +36      ;
                                   IF MRTC=1
                                       SET $PIECE(^(DATE),"^",5)=$PIECE(^TMP($JOB,CLERK,DATE),"^",5)+1
                               End DoDot:3
                       End DoDot:2
               End DoDot:1
 +37      ;
 +38      ;    Loop thru date/user cross-reference in the RECALL REMINDERS file (#403.5) and count PtCSch entries added.
 +39      ;
 +40      ;
           SET D1=DATE-.001
           FOR 
               SET D1=$ORDER(^SD(403.5,"AC",D1))
               if 'D1
                   QUIT 
               if D1\1'=DATE
                   QUIT 
               Begin DoDot:1
 +41      ;
 +42      ;
                   SET CLERK=0
                   FOR 
                       SET CLERK=$ORDER(^SD(403.5,"AC",D1,CLERK))
                       if 'CLERK
                           QUIT 
                       Begin DoDot:2
 +43      ;
 +44      ;
                           IF '$DATA(^TMP($JOB,CLERK,DATE))
                               SET ^TMP($JOB,CLERK,DATE)="0^0^0^0^0^0^0^0^0^0^0^0^0"
 +45      ;
                           SET $PIECE(^(DATE),"^",10)=$PIECE(^TMP($JOB,CLERK,DATE),"^",10)+1
                       End DoDot:2
               End DoDot:1
 +46      ;
 +47      ;    Loop thru date/user cross-reference in the SD WAIT LIST file (#409.3) and count EWL entries made.
 +48      ;
 +49      ;
           SET D1=DATE-.001
           FOR 
               SET D1=$ORDER(^SDWL(409.3,"AC",D1))
               if 'D1
                   QUIT 
               if D1\1'=DATE
                   QUIT 
               Begin DoDot:1
 +50      ;
 +51      ;
                   SET CLERK=0
                   FOR 
                       SET CLERK=$ORDER(^SDWL(409.3,"AC",D1,CLERK))
                       if 'CLERK
                           QUIT 
                       Begin DoDot:2
 +52      ;
 +53      ;
                           IF '$DATA(^TMP($JOB,CLERK,DATE))
                               SET ^TMP($JOB,CLERK,DATE)="0^0^0^0^0^0^0^0^0^0^0^0^0"
 +54      ;
                           SET $PIECE(^(DATE),"^",7)=$PIECE(^TMP($JOB,CLERK,DATE),"^",7)+1
                       End DoDot:2
               End DoDot:1
 +55      ;
 +56      ;   Loop thru date appointment made cross-reference in the SDEC APPOINTMENT file (#409.84) and count appointments
 +57      ;   made by type (EWL, Consult, PtCSch, APPT).  Increment request closed for each appointment made.
 +58       SET D1=DATE-.001
           FOR 
               SET D1=$ORDER(^SDEC(409.84,"AC",D1))
               if 'D1
                   QUIT 
               if D1\1'=DATE
                   QUIT 
               Begin DoDot:1
 +59      ;
                   SET DA=0
                   FOR 
                       SET DA=$ORDER(^SDEC(409.84,"AC",D1,DA))
                       if 'DA
                           QUIT 
                       SET CLERK=$PIECE(^SDEC(409.84,DA,0),"^",8)
                       SET TYPE=$PIECE($GET(^SDEC(409.84,DA,2)),"^",1)
                       Begin DoDot:2
 +60      ;  Skip if data missing
                           if CLERK=""
                               QUIT 
 +61      ;
                           SET PIECE=$SELECT($PIECE(TYPE,";",2)="SDWL(409.3,":8,$PIECE(TYPE,";",2)="GMR(123,":12,$PIECE(TYPE,";",2)="SD(403.5,":11,$PIECE(TYPE,";",2)="SDEC(409.85,":3,1:0)
 +62      ;
                           if 'PIECE
                               QUIT 
 +63      ;GRAB THE DATE PORTION
                           SET D2=$PIECE(D1,".",1)
 +64      ;
                           IF '$DATA(^TMP($JOB,CLERK,D2))
                               SET ^TMP($JOB,CLERK,D2)="0^0^0^0^0^0^0^0^0^0^0^0^0"
 +65      ;
 +66      ;  Update appointment made.
 +67      ;
 +68      ;
                           SET $PIECE(^TMP($JOB,CLERK,D2),"^",PIECE)=$PIECE(^TMP($JOB,CLERK,D2),"^",PIECE)+1
 +69      ;
 +70      ;  Update APPT or EWL request closed.
 +71      ;
 +72      ;
                           SET PIECE=$SELECT($PIECE(TYPE,";",2)="SDWL(409.3,":9,$PIECE(TYPE,";",2)="SDEC(409.85,":4,1:0)
                           if 'PIECE
                               QUIT 
 +73      ;
 +74      ;  Determine if APPT request is MRTC
 +75      ;
 +76      ;
                           IF $PIECE(TYPE,";",2)="SDEC(409.85,"
                               SET PTR=$PIECE(TYPE,";",1)
                               SET MRTC=+$PIECE($GET(^SDEC(409.85,PTR,3)),"^",1)
                               IF MRTC
                                   SET PIECE=6
 +77      ;
 +78      ;  Update request closed
 +79      ;
 +80      ;
                           SET $PIECE(^TMP($JOB,CLERK,D2),"^",PIECE)=$PIECE(^TMP($JOB,CLERK,D2),"^",PIECE)+1
                       End DoDot:2
               End DoDot:1
 +81      ;
 +82      ;    Loop thru date appointment cancelled cross-reference in the SDEC APPOINTMENT file (#409.84) and count cancellations.
 +83      ;
 +84      ;
           SET D1=DATE-.001
           FOR 
               SET D1=$ORDER(^SDEC(409.84,"AD",D1))
               if 'D1
                   QUIT 
               if D1\1'=DATE
                   QUIT 
               Begin DoDot:1
 +85      ;
 +86      ;
                   SET DA=0
                   FOR 
                       SET DA=$ORDER(^SDEC(409.84,"AD",D1,DA))
                       if 'DA
                           QUIT 
                       SET CLERK=$PIECE(^SDEC(409.84,DA,0),"^",21)
                       Begin DoDot:2
 +87      ;
 +88      ;  Skip if data is missing
                           if CLERK=""
                               QUIT 
 +89      ;
 +90      ;
                           IF '$DATA(^TMP($JOB,CLERK,DATE))
                               SET ^TMP($JOB,CLERK,DATE)="0^0^0^0^0^0^0^0^0^0^0^0^0"
 +91      ;
                           SET $PIECE(^(DATE),"^",13)=$PIECE(^TMP($JOB,CLERK,DATE),"^",13)+1
                       End DoDot:2
               End DoDot:1
 +92      ;
 +93      ;    Loop thru date/time-user cross-reference in SDEC CONTACTS file (#409.86) and count contacts.
 +94      ;
 +95      ;
           SET D1=DATE-.001
           FOR 
               SET D1=$ORDER(^SDEC(409.86,"AD",D1))
               if 'D1
                   QUIT 
               if D1\1'=DATE
                   QUIT 
               Begin DoDot:1
 +96      ;
 +97      ;
                   SET CLERK=0
                   FOR 
                       SET CLERK=$ORDER(^SDEC(409.86,"AD",D1,CLERK))
                       if 'CLERK
                           QUIT 
                       Begin DoDot:2
 +98      ;
 +99      ;
                           SET DA=0
                           FOR 
                               SET DA=$ORDER(^SDEC(409.86,"AD",D1,CLERK,DA))
                               if 'DA
                                   QUIT 
                               Begin DoDot:3
 +100     ;
                                   SET DA1=0
                                   FOR 
                                       SET DA1=$ORDER(^SDEC(409.86,"AD",D1,CLERK,DA,DA1))
                                       if 'DA1
                                           QUIT 
                                       Begin DoDot:4
 +101     ;
                                           IF '$DATA(^TMP($JOB,CLERK,DATE))
                                               SET ^TMP($JOB,CLERK,DATE)="0^0^0^0^0^0^0^0^0^0^0^0^0"
 +102     ;
                                           SET $PIECE(^(DATE),"^",1)=$PIECE(^TMP($JOB,CLERK,DATE),"^",1)+1
                                       End DoDot:4
                               End DoDot:3
                       End DoDot:2
               End DoDot:1
 +103     ;
 +104     ;
 +105     ;  Update the SD Audit Statistics file (#409.97)
 +106     ;
 +107     ;
           SET GLOBAL=^DIC(409.97,0,"GL")
 +108     ;
           SET CLERK=0
           FOR 
               SET CLERK=$ORDER(^TMP($JOB,CLERK))
               if 'CLERK
                   QUIT 
               Begin DoDot:1
 +109     ;
 +110     ;
                   KILL DO
                   SET DIC=GLOBAL
                   SET DIC(0)="FL"
                   SET DLAYGO="409.97"
                   SET X=CLERK
                   SET DIC("DR")="1////"_DATE
 +111     ;
                   FOR FLD=2:1:14
                       SET DIC("DR")=DIC("DR")_";"_FLD_"////"_$PIECE(^TMP($JOB,CLERK,DATE),"^",FLD-1)
 +112     ;
                   DO FILE^DICN
               End DoDot:1
 +113     ;
 +114     ;
           KILL ^TMP($JOB)
 +115     ;
 +116     ;
           QUIT 
 +117     ;
 +118     ;*zeb+tag 2/28/18 686 return compiled data
 +119     ;--------------------
 +120     ;SUMMGET2 - Return compiled Audit Report data via RPC
 +121     ;--------------------
 +122     ;Parameters
 +123     ;----------
 +124     ;SDECRET - global reference to array with return values
 +125     ;SDBEG   - start date for reporting; defaults to 1/2/1841
 +126     ;SDEND   - end date for reporting; defaults to 10/15/2114
 +127     ;USER    - IEN of a user to report on; defaults to all users
 +128     ;----------
 +129     ;Returns (one row for each user)
 +130     ;----------
 +131     ;USERIEN  - user's IEN
 +132     ;USERNAME - user's name
 +133     ;CONTACTS - number of patient contacts
 +134     ;APPTOPEN - number of APPT requests opened
 +135     ;APPTMADE - number of appointments made for APPT requests
 +136     ;APPTCLSD - number of APPT requests closed
 +137     ;MRTCOPEN - number of MRTC requests opened
 +138     ;MRTCCLSD - number of MRTC requests closed
 +139     ;EWLOPEN  - number of EWL requests opened
 +140     ;EWLMADE  - number of appointments made for EWL requests
 +141     ;EWLCLSD  - number of EWL requests closed
 +142     ;PTCSOPEN - number of PtCSch requests opened
 +143     ;PTCSMADE - number of appointments made for PtCSch requests
 +144     ;CNSLTMD  - number of appointments made for consults
 +145     ;APPTCXLD - number of appointments canceled
 +146     ;ACTIONS  - total number of actions
SUMMGET2(SDECRET,SDBEG,SDEND,USER) ;Get compiled Audit Report for a given date range
 +1        NEW X,Y,%DT,U,X1,X2
 +2        NEW SDTMP,SDECLN,SDSTATS,SDPC,SDDT,SDASIEN,SDASDATA
 +3        SET U="^"
 +4       ;translate dates to FM format
 +5        IF SDBEG]""
               SET %DT=""
               SET X=$PIECE(SDBEG,"@",1)
               DO ^%DT
               SET SDBEG=Y
               if Y=-1
                   SET SDBEG=1410102
               IF 1
 +6       ;default begin date
          IF '$TEST
               SET SDBEG=1410102
 +7        IF SDEND]""
               SET %DT=""
               SET X=$PIECE(SDEND,"@",1)
               DO ^%DT
               SET SDEND=Y
               if Y=-1
                   SET SDEND=4141015
               IF 1
 +8       ;default end date
          IF '$TEST
               SET SDEND=4141015
 +9       ;check user
 +10       IF USER]""
               IF '$DATA(^VA(200,+USER,0))
                   SET USER=""
 +11      ;set up return array
 +12      ;global reference to return array
           SET SDECRET="^TMP(""SDECAUD"","_$JOB_",""SUMMGET2"")"
 +13       KILL @SDECRET
 +14       SET SDECLN=0
 +15      ;set up column headers for return array
 +16      ;              1             2              3              4               5             6
 +17       SET SDTMP="T00030USERIEN^T00030USERNAME^T00030CONTACTS^T00030APPTOPEN^T00030APPTMADE^T00030APPTCLSD"
 +18      ;                     7              8              9             10            11
 +19       SET SDTMP=SDTMP_"^T00030MRTCOPEN^T00030MRTCCLSD^T00030EWLOPEN^T00030EWLMADE^T00030EWLCLSD"
 +20      ;                     12             13             14            15             16
 +21       SET SDTMP=SDTMP_"^T00030PTCSOPEN^T00030PTCSMADE^T00030CNSLTMD^T00030APPTCXLD^T00030ACTIONS"
 +22       SET @SDECRET@(SDECLN)=SDTMP_$CHAR(30)
 +23      ;if a single user is specified, loop over x-ref for dates for that user
 +24       IF USER]""
               Begin DoDot:1
 +25               SET SDSTATS="0^0^0^0^0^0^0^0^0^0^0^0^0^0"
 +26               SET X1=SDBEG
                   SET X2=-1
                   DO C^%DTC
                   SET SDDT=X
 +27               FOR 
                       SET SDDT=$ORDER(^SDAUDIT("E",USER,SDDT))
                       if SDDT=""
                           QUIT 
                       if SDDT>SDEND
                           QUIT 
                       Begin DoDot:2
 +28                       SET SDASIEN=""
 +29                       FOR 
                               SET SDASIEN=$ORDER(^SDAUDIT("E",USER,SDDT,SDASIEN))
                               if SDASIEN=""
                                   QUIT 
                               Begin DoDot:3
 +30                               SET SDASDATA=^SDAUDIT(SDASIEN,0)
 +31      ;field 15 is computed, so isn't in global
                                   SET $PIECE(SDASDATA,U,16)=$$GET1^DIQ(409.97,SDASIEN_",",15)
 +32                               FOR SDPC=1:1:14
                                       SET $PIECE(SDSTATS,U,SDPC)=$PIECE(SDSTATS,U,SDPC)+$PIECE(SDASDATA,U,SDPC+2)
                               End DoDot:3
                       End DoDot:2
 +33               SET SDECLN=SDECLN+1
 +34               SET SDTMP=USER_U_$$GET1^DIQ(200,USER_",",.01)_U_SDSTATS
 +35               SET @SDECRET@(SDECLN)=SDTMP_$CHAR(30)
               End DoDot:1
               IF 1
 +36      ;otherwise, loop over x-ref for users for those dates
 +37      IF '$TEST
               Begin DoDot:1
 +38               FOR 
                       SET USER=$ORDER(^SDAUDIT("E",USER))
                       if USER=""
                           QUIT 
                       Begin DoDot:2
 +39                       SET SDSTATS="0^0^0^0^0^0^0^0^0^0^0^0^0^0"
 +40                       SET X1=SDBEG
                           SET X2=-1
                           DO C^%DTC
                           SET SDDT=X
 +41                       FOR 
                               SET SDDT=$ORDER(^SDAUDIT("E",USER,SDDT))
                               if SDDT=""
                                   QUIT 
                               if SDDT>SDEND
                                   QUIT 
                               Begin DoDot:3
 +42                               SET SDASIEN=""
 +43                               FOR 
                                       SET SDASIEN=$ORDER(^SDAUDIT("E",USER,SDDT,SDASIEN))
                                       if SDASIEN=""
                                           QUIT 
                                       Begin DoDot:4
 +44                                       SET SDASDATA=^SDAUDIT(SDASIEN,0)
 +45      ;field 15 is computed, so isn't in global
                                           SET $PIECE(SDASDATA,U,16)=$$GET1^DIQ(409.97,SDASIEN_",",15)
 +46                                       FOR SDPC=1:1:14
                                               SET $PIECE(SDSTATS,U,SDPC)=$PIECE(SDSTATS,U,SDPC)+$PIECE(SDASDATA,U,SDPC+2)
                                       End DoDot:4
                               End DoDot:3
 +47      ;don't send back if user has no data to send
                           if SDSTATS="0^0^0^0^0^0^0^0^0^0^0^0^0^0"
                               QUIT 
 +48                       SET SDECLN=SDECLN+1
 +49                       SET SDTMP=USER_U_$$GET1^DIQ(200,USER_",",.01)_U_SDSTATS
 +50                       SET @SDECRET@(SDECLN)=SDTMP_$CHAR(30)
                       End DoDot:2
               End DoDot:1
 +51       QUIT