| 1 | ACKQDWLU ;AUG/JLTP BIR/PTD HCIOFO/BH-QUASAR Utility Routine ; [ 04/25/96 10:03 ]
 | 
|---|
| 2 |  ;;3.0;QUASAR;**1**;Feb 11, 2000
 | 
|---|
| 3 |  ;Per VHA Directive 10-93-142, this routine SHOULD NOT be modified.
 | 
|---|
| 4 |  ;
 | 
|---|
| 5 | WLSTATUS(ACKDA,ACKDIV,ACKWLMSG) ; determine the status for each division
 | 
|---|
| 6 |  ; input :  ACKDA=identifier of month to be compiled
 | 
|---|
| 7 |  ;      
 | 
|---|
| 8 |  ;          array ACKDIV passed by reference (.ACKDIV) containing
 | 
|---|
| 9 |  ;           the divisions selected for compilation
 | 
|---|
| 10 |  ;          array ACKWLMSG passed by reference (.ACKWLMSG)
 | 
|---|
| 11 |  ; output : ACKWLMSG=status^oktocontinue^message
 | 
|---|
| 12 |  ;     and  ACKWLMSG(DIV)=null
 | 
|---|
| 13 |  ;   where  status=0, 1, 2 or 3 (for information only)
 | 
|---|
| 14 |  ;          oktocontinue=true, false or unknown (1, 0 or '?') 
 | 
|---|
| 15 |  ;          message=text message for user
 | 
|---|
| 16 |  ;          DIV=list of Divisions the message applies to
 | 
|---|
| 17 |  ;           [ ACKWLMSG(DIV) corresponds to ACKDIV(DIV) ]
 | 
|---|
| 18 |  N DIVNUM,DIVIEN,DIVMSG
 | 
|---|
| 19 |  K ACKWLMSG
 | 
|---|
| 20 |  ;
 | 
|---|
| 21 |  ; the following section checks each division to determine the worst
 | 
|---|
| 22 |  ;  case. it builds the array ACKWLMSG in the following way
 | 
|---|
| 23 |  ;   ACKWLMSG=0^0^message - error, do not proceed.
 | 
|---|
| 24 |  ;   ACKWLMSG=1^0^msg,ACKWLMSG(DIV)=null - if one or more 
 | 
|---|
| 25 |  ;    divisions are currently compiling or have been verified.
 | 
|---|
| 26 |  ;   ACKWLMSG=2^?^msg,ACKWLMSG(DIV)=null - if no divisions are
 | 
|---|
| 27 |  ;    compiling and none have been verified, but one or more have been
 | 
|---|
| 28 |  ;    compiled.
 | 
|---|
| 29 |  ;   ACKWLMSG=3^1^msg - no division have been compiled, ok to continue
 | 
|---|
| 30 |  S ACKWLMSG=5,DIVNUM=""
 | 
|---|
| 31 |  F  S DIVNUM=$O(ACKDIV(DIVNUM)) Q:DIVNUM=""  D
 | 
|---|
| 32 |  . S DIVIEN=$P(ACKDIV(DIVNUM),U,1) ; get division IEN
 | 
|---|
| 33 |  . S DIVMSG=$$WLSTADIV(ACKDA,DIVIEN) ; determine status of this division
 | 
|---|
| 34 |  . ; if this division is no worse than the current status then ignore
 | 
|---|
| 35 |  . I +DIVMSG>ACKWLMSG Q
 | 
|---|
| 36 |  . ; if this division is same as curr status then add to array
 | 
|---|
| 37 |  . I +ACKWLMSG=+DIVMSG S:+ACKWLMSG<3 ACKWLMSG(DIVNUM)="" Q
 | 
|---|
| 38 |  . ; if this division is worse than curr status then refresh array
 | 
|---|
| 39 |  . K ACKWLMSG S ACKWLMSG=DIVMSG S:+ACKWLMSG<3 ACKWLMSG(DIVNUM)=""
 | 
|---|
| 40 |  . ;
 | 
|---|
| 41 |  Q ACKWLMSG
 | 
|---|
| 42 |  ;
 | 
|---|
| 43 | WLSTADIV(ACKDA,DIVIEN) ; determine status of ACKDIV for month ACKDA
 | 
|---|
| 44 |  N MSG
 | 
|---|
| 45 |  I '$D(^ACK(509850.7,ACKDA,5,DIVIEN,0)) D  Q MSG
 | 
|---|
| 46 |  . S MSG="3^1^Capitation Report Not Generated"
 | 
|---|
| 47 |  I $P(^ACK(509850.7,ACKDA,5,DIVIEN,0),U,8) D  Q MSG
 | 
|---|
| 48 |  . S MSG="1^0^Capitation Report Already Verified"
 | 
|---|
| 49 |  I $P(^ACK(509850.7,ACKDA,5,DIVIEN,0),U,4) D  Q MSG
 | 
|---|
| 50 |  . S MSG="2^?^Capitation Report Already Generated"
 | 
|---|
| 51 |  I $P(^ACK(509850.7,ACKDA,5,DIVIEN,0),U,2) D  Q MSG
 | 
|---|
| 52 |  . S MSG="1^0^Capitation Report Already Running - Not Completed"
 | 
|---|
| 53 |  Q "4^1^Capitation report Cleared down"
 | 
|---|
| 54 |  ;
 | 
|---|
| 55 | STAQES(ACKWLMSG) ;  Non Interactive run in the background
 | 
|---|
| 56 |  ; input: ACKWLMSG as created in $$WLSTATUS above
 | 
|---|
| 57 |  ; output: 1 if ok to continue, 0 if not
 | 
|---|
| 58 |  ;
 | 
|---|
| 59 |  ;  If user not allowed to continue then exit
 | 
|---|
| 60 |  I $P(ACKWLMSG,U,2)=0 Q 0
 | 
|---|
| 61 |  ;  Report not generated - set up record and continue     
 | 
|---|
| 62 |  I $P(ACKWLMSG,U,1)=3,$P(ACKWLMSG,U,2)=1 Q 2
 | 
|---|
| 63 |  ;  Data deleted from file - Okay to go
 | 
|---|
| 64 |  I $P(ACKWLMSG,U,1)=4,$P(ACKWLMSG,U,2)=1 Q 1
 | 
|---|
| 65 |  ;  Remaining option is a query - Already been run so quit
 | 
|---|
| 66 |  I $P(ACKWLMSG,U,2)="?" Q 0
 | 
|---|
| 67 |  Q
 | 
|---|
| 68 |  ;
 | 
|---|
| 69 |  ;
 | 
|---|
| 70 | STAQES1(ACKDA,ACKDIV,ACKWLMSG) ;  Interactive Version run in the foreground
 | 
|---|
| 71 |  ;
 | 
|---|
| 72 |  ;  Input=ACKDA    -  Site ID and run date selected
 | 
|---|
| 73 |  ;        ACKDIV   -  Cretated in ^ACKQDWL
 | 
|---|
| 74 |  ;        ACKWLMSG -  Created in WLSTATUS (above)
 | 
|---|
| 75 |  ;
 | 
|---|
| 76 |  N ACKX,DIR,Y,DIRUT,DUOUT,DTOUT,ACKDIVNO
 | 
|---|
| 77 |  ;  Display message and associated Divisions
 | 
|---|
| 78 |  ;  If status is okay quit passing back 1
 | 
|---|
| 79 |  I $P(ACKWLMSG,U,2)=1 Q 1
 | 
|---|
| 80 |  ;  If user is not aloud to continue display problem and quit with "0"
 | 
|---|
| 81 |  I $P(ACKWLMSG,U,2)=0 D DISPLAY Q 0
 | 
|---|
| 82 |  ;
 | 
|---|
| 83 |  ;  Remaining option is a query i.e. $P(ACKWLMSG,U,2)="?"
 | 
|---|
| 84 |  ;
 | 
|---|
| 85 |  S ACKDIVNO="" W !
 | 
|---|
| 86 |  W $P(ACKWLMSG,U,3)_" for the following Division(s) ",!!
 | 
|---|
| 87 |  F  S ACKDIVNO=$O(ACKWLMSG(ACKDIVNO)) Q:ACKDIVNO=""  D
 | 
|---|
| 88 |  . W ?54,$P(ACKDIV(ACKDIVNO),U,3),!
 | 
|---|
| 89 |  ;
 | 
|---|
| 90 |  S DIWL=1,DIWR=80,DIWF=""
 | 
|---|
| 91 |  S DIR(0)="Y",DIR("B")="NO",DIR("A")="Continue",DIR("A",1)=$P(ACKWLMSG,U,3)
 | 
|---|
| 92 |  S DIR("?")="Answer Y for YES or N for NO."
 | 
|---|
| 93 |  S DIR("??")="^W !?5,""If you answer YES, I will re-generate capitation"
 | 
|---|
| 94 |  S DIR("??")=DIR("??")_" data.  This will"",!?5,""overwrite existing "
 | 
|---|
| 95 |  S DIR("??")=DIR("??")_"capitation data for the chosen month."""
 | 
|---|
| 96 |  D ^DIR
 | 
|---|
| 97 |  S X=Y
 | 
|---|
| 98 |  ;  If user has entered YES clean up files also check that all Division
 | 
|---|
| 99 |  ;  levels have been created if no set them up  
 | 
|---|
| 100 |  I X D CLEAN
 | 
|---|
| 101 |  Q X
 | 
|---|
| 102 |  ;
 | 
|---|
| 103 |  ;
 | 
|---|
| 104 | DISPLAY ;  Display Divisions that have problems
 | 
|---|
| 105 |  ;
 | 
|---|
| 106 |  ;  Called from STAQES1
 | 
|---|
| 107 |  ;
 | 
|---|
| 108 |  S ACKDIVNO="" W !!
 | 
|---|
| 109 |  W $P(ACKWLMSG,U,3),!!
 | 
|---|
| 110 |  W "This error has been found for the following Division(s) ",!!
 | 
|---|
| 111 |  F  S ACKDIVNO=$O(ACKWLMSG(ACKDIVNO)) Q:ACKDIVNO=""  D
 | 
|---|
| 112 |  . W ?44,$P(ACKDIV(ACKDIVNO),U,3),!
 | 
|---|
| 113 |  Q
 | 
|---|
| 114 |  ;
 | 
|---|
| 115 | CLEAN ;  Clean out previously generated data for selected divisions
 | 
|---|
| 116 |  ;
 | 
|---|
| 117 |  ;  Called from STAQES1
 | 
|---|
| 118 |  ;
 | 
|---|
| 119 |  N X,DIVIEN,ACK1
 | 
|---|
| 120 |  S ACK1=""
 | 
|---|
| 121 |  D WAIT^DICD
 | 
|---|
| 122 |  F  S ACK1=$O(ACKDIV(ACK1)) Q:ACK1=""  D
 | 
|---|
| 123 |  . S DIVIEN=$P(ACKDIV(ACK1),U,1)
 | 
|---|
| 124 |  . I '$D(^ACK(509850.7,ACKDA,5,DIVIEN)) D CREATE1 Q
 | 
|---|
| 125 |  . D STF
 | 
|---|
| 126 |  . F X=1,2,3,5 D MDL(X,DIVIEN,ACKDA)
 | 
|---|
| 127 |  Q
 | 
|---|
| 128 |  ;
 | 
|---|
| 129 | CREATE(ACKDA,ACKM,ACKDIV) ;  Create new date level entry on the workload file
 | 
|---|
| 130 |  ;
 | 
|---|
| 131 |  ;  Called from ^ACKQDWL
 | 
|---|
| 132 |  ;  Input=ACKDA  -  Site ID and run date selected
 | 
|---|
| 133 |  ;        ACKM   -  Date run selected in Fm format with '00' for day.
 | 
|---|
| 134 |  ;        ACKDIV -  Array of Divisions created in ^ACKQDWL
 | 
|---|
| 135 |  ;
 | 
|---|
| 136 |  I '$D(^ACK(509850.7,ACKDA,0)) D
 | 
|---|
| 137 |  . S DIC="^ACK(509850.7,",DIC(0)="L",DLAYGO=509850.7,ACKLAYGO=""
 | 
|---|
| 138 |  . S X=ACKM,DINUM=ACKDA
 | 
|---|
| 139 |  . D FILE^DICN
 | 
|---|
| 140 |  ;
 | 
|---|
| 141 |  ;  If they dont exisit create new Division levels in the Workload file
 | 
|---|
| 142 |  N DIVIEN,ACK1,X
 | 
|---|
| 143 |  S ACK1=""
 | 
|---|
| 144 |  F  S ACK1=$O(ACKDIV(ACK1)) Q:ACK1=""  D
 | 
|---|
| 145 |  . S DIVIEN=$P(ACKDIV(ACK1),U,1)
 | 
|---|
| 146 |  . I $D(^ACK(509850.7,ACKDA,5,DIVIEN)) Q
 | 
|---|
| 147 |  . D CREATE1
 | 
|---|
| 148 |  Q
 | 
|---|
| 149 |  ;
 | 
|---|
| 150 | CREATE1 ;  Called from CLEAN code block
 | 
|---|
| 151 |  S DIC="^ACK(509850.7,"_ACKDA_",5,"
 | 
|---|
| 152 |  S DIC(0)="L",DIC("P")="509850.75P"
 | 
|---|
| 153 |  S DA=DIVIEN,DA(1)=ACKDA,X=DIVIEN,DINUM=DIVIEN
 | 
|---|
| 154 |  K DD,DO D FILE^DICN
 | 
|---|
| 155 |  Q
 | 
|---|
| 156 |  ;  
 | 
|---|
| 157 | STF ;  Delete the Start and end time and Job number from record.
 | 
|---|
| 158 |  ;  Called from CLEAN code block.
 | 
|---|
| 159 |  N ACKX,DIE,DR,DA,SL,X,ACKARR
 | 
|---|
| 160 |  S ACKARR(509850.75,DIVIEN_","_ACKDA_",",5.02)="@"
 | 
|---|
| 161 |  S ACKARR(509850.75,DIVIEN_","_ACKDA_",",5.03)="@"
 | 
|---|
| 162 |  S ACKARR(509850.75,DIVIEN_","_ACKDA_",",5.04)="@"
 | 
|---|
| 163 |  D FILE^DIE("K","ACKARR")
 | 
|---|
| 164 |  Q
 | 
|---|
| 165 |  ;
 | 
|---|
| 166 | MDL(FLD,DIVIEN,ACKDA) ;  Delete all entries from Multiple
 | 
|---|
| 167 |  ;  Called from CLEAN code block.
 | 
|---|
| 168 |  ;  Input=FLD    - Multiple field level being deleted (1,2 or 3)
 | 
|---|
| 169 |  ;        DIVIEN - Division IEN #
 | 
|---|
| 170 |  ;        ACKDA  - Site ID and run date selected
 | 
|---|
| 171 |  ;
 | 
|---|
| 172 |  N ACKARR,ACKSUB
 | 
|---|
| 173 |  S ACKSUB="0"
 | 
|---|
| 174 |  F  S ACKSUB=$O(^ACK(509850.7,ACKDA,5,DIVIEN,FLD,ACKSUB)) Q:'ACKSUB!(ACKSUB'?.N)  D
 | 
|---|
| 175 |  . I FLD=1 S ACKARR(509850.751,ACKSUB_","_DIVIEN_","_ACKDA_",",.01)="@"
 | 
|---|
| 176 |  . I FLD=2 S ACKARR(509850.752,ACKSUB_","_DIVIEN_","_ACKDA_",",.01)="@"
 | 
|---|
| 177 |  . I FLD=3 S ACKARR(509850.753,ACKSUB_","_DIVIEN_","_ACKDA_",",.01)="@"
 | 
|---|
| 178 |  . I FLD=5 S ACKARR(509850.755,ACKSUB_","_DIVIEN_","_ACKDA_",",.01)="@"
 | 
|---|
| 179 |  I $D(ACKARR) D FILE^DIE("K","ACKARR")
 | 
|---|
| 180 |  Q
 | 
|---|
| 181 |         ;
 | 
|---|
| 182 | ECSTAT ;  For EC Stats.
 | 
|---|
| 183 |  ;
 | 
|---|
| 184 |  N ACKCODE
 | 
|---|
| 185 |  S ACK6=0
 | 
|---|
| 186 |  F  S ACK6=$O(^ACK(509850.7,ACKDA,5,ACKVDVN,5,ACK6)) Q:ACK6=""!(ACK6'?.N)  D
 | 
|---|
| 187 |  . S ACKREC=^ACK(509850.7,ACKDA,5,ACKVDVN,5,ACK6,0)
 | 
|---|
| 188 |  . S ACKAUD=$P(ACKREC,U,2,4),ACKSPE=$P(ACKREC,U,5,7)
 | 
|---|
| 189 |  . S ACKCODE=$P(ACKREC,U,1)
 | 
|---|
| 190 |  . I $TR(ACKAUD,"^","")'="" D
 | 
|---|
| 191 |  . . S ^TMP("ACKQDWLP",$J,"R",ACKVDVN,5,"A",ACKCODE)=ACKAUD
 | 
|---|
| 192 |  . . S ^TMP("ACKQDWLP",$J,"S",5,"A",ACKCODE,ACKVDVN)=ACKAUD
 | 
|---|
| 193 |  . I $TR(ACKSPE,"^","")'="" D
 | 
|---|
| 194 |  . . S ^TMP("ACKQDWLP",$J,"R",ACKVDVN,5,"S",ACKCODE)=ACKSPE
 | 
|---|
| 195 |  . . S ^TMP("ACKQDWLP",$J,"S",5,"S",ACKCODE,ACKVDVN)=ACKSPE
 | 
|---|
| 196 |  Q
 | 
|---|