| 1 | PRS8 ;HISC/MRL,WIRMFO/JAH-DECOMPOSITION, PROCESSOR ;01/30/2007
 | 
|---|
| 2 |  ;;4.0;PAID;**22,111**;Sep 21, 1995;Build 2
 | 
|---|
| 3 |  ;;Per VHA Directive 2004-038, this routine should not be modified.
 | 
|---|
| 4 |  ;
 | 
|---|
| 5 |  ;This is the routine which is used to start the decomposition
 | 
|---|
| 6 |  ;process.  There are several entry points which allow one to
 | 
|---|
| 7 |  ;process either an entire T&L, all entries or a single person.
 | 
|---|
| 8 |  ;Once the decision is made as to which entries to process the
 | 
|---|
| 9 |  ;routine ^PRS8DR is called and everything starts running.
 | 
|---|
| 10 |  ;
 | 
|---|
| 11 |  D DT^DICRW,HOME^%ZIS S DIK="^DOPT(""PRS8"","
 | 
|---|
| 12 |  G OPT:$D(^DOPT("PRS8",3)) K ^DOPT("PRS8")
 | 
|---|
| 13 |  S ^DOPT("PRS8",0)="PAID Decomposition Option"
 | 
|---|
| 14 |  F I=1:1 S X=$T(@I) Q:X']""  D
 | 
|---|
| 15 |  .S ^DOPT("PRS8",I,0)=$P(X,";",3)
 | 
|---|
| 16 |  .S ^DOPT("PRS8","B",$P(X,";",3),I)=""
 | 
|---|
| 17 |  D IXALL^DIK
 | 
|---|
| 18 |  ;
 | 
|---|
| 19 | OPT ; --- option selection
 | 
|---|
| 20 |  W !! S DIC="^DOPT(""PRS8"",",DIC(0)="EAQM" D ^DIC
 | 
|---|
| 21 |  I Y>0 S SEE=1 D @+Y G OPT
 | 
|---|
| 22 |  G ^PRS8CV
 | 
|---|
| 23 |  ;
 | 
|---|
| 24 | 1 ;;EMPLOYEE
 | 
|---|
| 25 |  W @IOF,!?21,"DECOMPOSE TIME FOR A SPECIFIC EMPLOYEE",!
 | 
|---|
| 26 | 11 S (SEE,SAVE)=1,DIC("A")="Select Desired PAY PERIOD:  "
 | 
|---|
| 27 |  D PY I 'OK D ^PRS8CV Q
 | 
|---|
| 28 | 12 S DIC("A")="Decompose Time for which EMPLOYEE?  "
 | 
|---|
| 29 |  D EMP G 11:'OK,12:OK<0
 | 
|---|
| 30 |  S (OK,SEE)=1 D EXIST G 12:'OK
 | 
|---|
| 31 |  D PRINT
 | 
|---|
| 32 |  G 12 ;ask for another
 | 
|---|
| 33 |  ;
 | 
|---|
| 34 | 2 ;;T&L DECOMPOSITION
 | 
|---|
| 35 |  W @IOF,!?35,"DECOMPOSE TIME FOR A T&L",!
 | 
|---|
| 36 |  D ^PRS8TL Q
 | 
|---|
| 37 |  ;
 | 
|---|
| 38 | 3 ;;VIEW
 | 
|---|
| 39 |  W @IOF,!?22,"VIEW DECOMPOSED TIME FOR A SPECIFIC EMPLOYEE",!
 | 
|---|
| 40 |  S SAVE=0,SEE=1 G 11
 | 
|---|
| 41 |  ;
 | 
|---|
| 42 | DFN ; --- entry point where DFN and PY are defined
 | 
|---|
| 43 |  N %
 | 
|---|
| 44 |  S DFN=$G(DFN),PY=$G(PY)
 | 
|---|
| 45 |  D CKPY Q:'OK
 | 
|---|
| 46 |  D CKDFN Q:OK'>0
 | 
|---|
| 47 |  S SEE=+$G(SEE)
 | 
|---|
| 48 |  S SAVE=+$G(SAVE)
 | 
|---|
| 49 |  G ^PRS8DR
 | 
|---|
| 50 |  ;
 | 
|---|
| 51 | PY ; --- select pay period to decompose
 | 
|---|
| 52 |  W ! S DIC="^PRST(458,",DIC(0)="AEQMZ" D ^DIC
 | 
|---|
| 53 |  S PY=+Y K DIC
 | 
|---|
| 54 |  ;
 | 
|---|
| 55 | CKPY ; --- entry point for checking PY variable
 | 
|---|
| 56 |  S (E,OK)=0,PY=+$G(PY) D
 | 
|---|
| 57 |  .I '$D(^PRST(458,+PY,0)) S E=1 Q  ;no/invalid pp
 | 
|---|
| 58 |  .S PPD=$G(^PRST(458,+PY,1)) I 'PPD S E=2 Q  ;no/invalid days node
 | 
|---|
| 59 |  .S X1=+PPD,X2=-14 D C^%DTC S PRS8D=X
 | 
|---|
| 60 |  .S X=$G(^PRST(458,"AD",X)),PPD(0)=+X,PPD(1)=$G(^PRST(458,+X,1)) ;last pp dates
 | 
|---|
| 61 |  .S X1=+PPD,X2=14 D C^%DTC ;15th day
 | 
|---|
| 62 |  .S X=$G(^PRST(458,"AD",X)),PPD(15)=+X
 | 
|---|
| 63 |  .S OK=1 D EN^PRS8HD K HO,PRS8D
 | 
|---|
| 64 |  I 'OK,E,PY'=-1 D NOPE
 | 
|---|
| 65 |  Q
 | 
|---|
| 66 |  ;
 | 
|---|
| 67 | EMP ; --- select employee
 | 
|---|
| 68 |  W ! S DIC="^PRSPC(",DIC(0)="AEQMZ" D ^DIC
 | 
|---|
| 69 |  S OK=0,DFN=+Y K DIC Q:DFN'>0  S OK=1
 | 
|---|
| 70 |  ;
 | 
|---|
| 71 | CKDFN ; --- entry point for checking DFN
 | 
|---|
| 72 |  S E=0,DFN=+$G(DFN)
 | 
|---|
| 73 |  S:'$D(^PRSPC(+DFN,0)) E=3
 | 
|---|
| 74 |  S:'$D(^PRST(458,+PY,"E",+DFN,0)) E=4
 | 
|---|
| 75 |  I E,DFN'=-1 D NOPE
 | 
|---|
| 76 |  Q
 | 
|---|
| 77 |  ;
 | 
|---|
| 78 | ONE ; --- entry point for decomposing a single entry (non-inteactive)
 | 
|---|
| 79 |  N %,DA
 | 
|---|
| 80 |  S SEE=0,SAVE=1,PY=+$G(PPI)
 | 
|---|
| 81 |  D CKPY G END:'OK
 | 
|---|
| 82 |  D CKDFN G END:'OK
 | 
|---|
| 83 |  D ^PRS8DR G END
 | 
|---|
| 84 |  ;
 | 
|---|
| 85 | PRINT ; --- where do I display this
 | 
|---|
| 86 |  S PRS8("PGM")="1^PRS8DR",PRS8("VAR")="DFN^PY^SAVE^SEE^PPD^PPD(^HD(",PRS8("DES")="Single Employee Descomposition" D DEV^PRS8UT
 | 
|---|
| 87 |  K PRS8 Q
 | 
|---|
| 88 |  ;
 | 
|---|
| 89 | EXIST ; --- check to see if data exists and show
 | 
|---|
| 90 |  K VAL,VALOLD S VALOLD=$G(^PRST(458,+PY,"E",+DFN,5)) Q:VALOLD=""
 | 
|---|
| 91 |  D ^PRSAENT,^PRS8VW ;show existing data
 | 
|---|
| 92 |  S TMTD=$G(^PRST(458,+PY,"E",DFN,0)),TMTD=$S($P(TMTD,"^",2)="X":1,1:0)
 | 
|---|
| 93 |  W !!,"The above data already exists from a previous decomposition.  You may decompose"
 | 
|---|
| 94 |  W !,"again at this time to identify any changes.  Since this "
 | 
|---|
| 95 |  I TMTD W "record has been TRANSMITTED",!,"already the original record will not be overwritten!!" Q
 | 
|---|
| 96 |  E  W "is a",$S(SAVE:"n EDIT",1:" VIEW")," option",!,"running the decomposition WILL ",$S('SAVE:"NOT ",1:""),"overwrite existing information!"
 | 
|---|
| 97 |  ;
 | 
|---|
| 98 | DECOM ; --- decompose again
 | 
|---|
| 99 |  W !!,"Do you wish to run the decomposition" S %=2 D YN^DICN
 | 
|---|
| 100 |  I % S OK=$S(%=1:1,1:0) Q
 | 
|---|
| 101 |  W !?4,"Answer YES to rerun the decomposition process for this individual and ",$S('TMTD!('SAVE):"VIEW",1:"SAVE"),!?4,"the changes.  Respond NO to QUIT now!" G DECOM
 | 
|---|
| 102 |  ;
 | 
|---|
| 103 | NOPE ; --- can't process
 | 
|---|
| 104 |  Q:'E  S ER(+E)=$P($T(ER+E),";;",2) W:SEE !?4,ER(+E),$C(7) S OK=0 Q
 | 
|---|
| 105 |  ;
 | 
|---|
| 106 | END ; --- all done here/kill variables
 | 
|---|
| 107 |  Q
 | 
|---|
| 108 |  ;
 | 
|---|
| 109 | AUTOPINI(PPIEN,EMPIEN,PRIOR,PRVAL) ; initialize auto-posted data
 | 
|---|
| 110 |  ; This call backs out auto-posted data from the time card (if any)
 | 
|---|
| 111 |  ; inputs
 | 
|---|
| 112 |  ;   PPIEN  = pay period IEN (file 458)
 | 
|---|
| 113 |  ;   EMPIEN = employee IEN (file 450, sub-file 458.01)
 | 
|---|
| 114 |  ;   PRIOR  = optional flag, true (=1) to return original data
 | 
|---|
| 115 |  ;   PRVAL  = optional array, required if PRIOR true
 | 
|---|
| 116 |  ;            passed by reference
 | 
|---|
| 117 |  ;            contains the original data (before removal) in the format
 | 
|---|
| 118 |  ;              PRVAL(day number,node number)=value of node
 | 
|---|
| 119 |  ;            if no auto-posted data then array would be undefined
 | 
|---|
| 120 |  ;
 | 
|---|
| 121 |  N DAY,NODE,TOUR
 | 
|---|
| 122 |  I $G(PRIOR) K PRVAL
 | 
|---|
| 123 |  ;
 | 
|---|
| 124 |  ; loop thru days of employee time card
 | 
|---|
| 125 |  S DAY=0 F  S DAY=$O(^PRST(458,PPIEN,"E",EMPIEN,"D",DAY))  Q:DAY=""  D
 | 
|---|
| 126 |  . ; quit if day not auto-posted (DUZ not = .5 POSTMASTER)
 | 
|---|
| 127 |  . Q:$P($G(^PRST(458,PPIEN,"E",EMPIEN,"D",DAY,10)),"^",2)'=.5
 | 
|---|
| 128 |  . ;
 | 
|---|
| 129 |  . ; if PRIOR true then save the current data
 | 
|---|
| 130 |  . I $G(PRIOR) F NODE=2,3,10 D
 | 
|---|
| 131 |  . . S PRVAL(DAY,NODE)=$G(^PRST(458,PPIEN,"E",EMPIEN,"D",DAY,NODE))
 | 
|---|
| 132 |  . ;
 | 
|---|
| 133 |  . ; determine tour of duty
 | 
|---|
| 134 |  . S TOUR=$P($G(^PRST(458,PPIEN,"E",EMPIEN,"D",DAY,0)),"^",2)
 | 
|---|
| 135 |  . ;
 | 
|---|
| 136 |  . ; if day off then delete auto-posted data else restore day to HX
 | 
|---|
| 137 |  . I TOUR=1 K ^PRST(458,PPIEN,"E",EMPIEN,"D",DAY,2),^(3),^(10)
 | 
|---|
| 138 |  . E  D
 | 
|---|
| 139 |  . . S $P(^PRST(458,PPIEN,"E",EMPIEN,"D",DAY,2),"^",3)="HX"
 | 
|---|
| 140 |  . . K ^PRST(458,PPIEN,"E",EMPIEN,"D",DAY,3)
 | 
|---|
| 141 |  Q
 | 
|---|
| 142 |  ;
 | 
|---|
| 143 | AUTOPRES(PPIEN,EMPIEN,PRVAL) ; restore auto-posted data
 | 
|---|
| 144 |  ; This call restores original auto-posted data that was initialized
 | 
|---|
| 145 |  ; by AUTOPINI. See AUTOPINI for description of inputs.
 | 
|---|
| 146 |  ;
 | 
|---|
| 147 |  N DAY,NODE
 | 
|---|
| 148 |  ;
 | 
|---|
| 149 |  ; loop thru days with auto-posted data
 | 
|---|
| 150 |  S DAY=0 F  S DAY=$O(PRVAL(DAY)) Q:'DAY  D
 | 
|---|
| 151 |  . ; loop thru nodes and restore original data
 | 
|---|
| 152 |  . F NODE=2,3,10 I $D(PRVAL(DAY,NODE)) D
 | 
|---|
| 153 |  . . S ^PRST(458,PPIEN,"E",EMPIEN,"D",DAY,NODE)=PRVAL(DAY,NODE)
 | 
|---|
| 154 |  Q
 | 
|---|
| 155 |  ;
 | 
|---|
| 156 | ER ; error messages
 | 
|---|
| 157 |  ;;Invalid/Missing Pay Period passed (variable PY)
 | 
|---|
| 158 |  ;;The 1 node for the Pay Period is missing but needed to process
 | 
|---|
| 159 |  ;;Employee does not exist in Employee (450) file
 | 
|---|
| 160 |  ;;Employee has no timekeeping record for requested Pay Period
 | 
|---|