| [613] | 1 | PRSPESR ;WOIFO/JAH - part-time physicians ESR Edit ;11/16/04 | 
|---|
|  | 2 | ;;4.0;PAID;**93**;Sep 21, 1995;Build 7 | 
|---|
|  | 3 | ;;Per VHA Directive 2004-038, this routine should not be modified. | 
|---|
|  | 4 | ; | 
|---|
|  | 5 | ;Allow PTP employee w/ a memorandum to review memo status | 
|---|
|  | 6 | ;then edit, update, and sign daily ESRs. | 
|---|
|  | 7 | ;call from option-"Electronic Subsidiary Record". | 
|---|
|  | 8 | Q | 
|---|
|  | 9 | ; | 
|---|
|  | 10 | MAIN ; main entry point called from ESR edit option | 
|---|
|  | 11 | N PICKLIST,PRSIEN,OUT,PLIST,PICK | 
|---|
|  | 12 | ; | 
|---|
|  | 13 | ;get users PRSIEN | 
|---|
|  | 14 | S PRSIEN=$$PRSIEN^PRSPUT2(1) | 
|---|
|  | 15 | Q:PRSIEN'>0 | 
|---|
|  | 16 | ; | 
|---|
|  | 17 | ;While PTP is not done continue | 
|---|
|  | 18 | ; | 
|---|
|  | 19 | S OUT=0 | 
|---|
|  | 20 | F  D  Q:OUT | 
|---|
|  | 21 | .; BUILD OPTION PICK LIST--MEMO ACTIONS, PRIOR, CURRENT AND NEXT PP ESRs | 
|---|
|  | 22 | .; | 
|---|
|  | 23 | .; | 
|---|
|  | 24 | .  K PLIST | 
|---|
|  | 25 | .  D BLDPICK(.PLIST,PRSIEN) | 
|---|
|  | 26 | .; | 
|---|
|  | 27 | .  W @IOF,! | 
|---|
|  | 28 | .; get out if there's nothing in the list. | 
|---|
|  | 29 | .  I '$D(PLIST) D  Q | 
|---|
|  | 30 | ..    W !,"No ESR records available.",!!! | 
|---|
|  | 31 | ..    S OUT=$$ASK^PRSLIB00(1) | 
|---|
|  | 32 | ..    S OUT=1 | 
|---|
|  | 33 | .; get users choice of action | 
|---|
|  | 34 | .  S PICK=$$CHOICE(.PLIST) | 
|---|
|  | 35 | .  I PICK=0 S OUT=1 Q | 
|---|
|  | 36 | .  I $P(PLIST(PICK),U)="M" D MEMO(PRSIEN,PLIST(PICK)) ;### CALL MEMO OPTION | 
|---|
|  | 37 | .  I "NCP"[$P(PLIST(PICK),U) D | 
|---|
|  | 38 | ..   ;Make sure we have a signature code before continuing | 
|---|
|  | 39 | ..   I '$$ESIGC^PRSPUT2(1) W !! S OUT=$$ASK^PRSLIB00(1) Q | 
|---|
|  | 40 | ..   ; | 
|---|
|  | 41 | ..   D ESR(PRSIEN,$P(PLIST(PICK),U,2),$P(PLIST(PICK),U,3),.OUT) | 
|---|
|  | 42 | ; | 
|---|
|  | 43 | Q | 
|---|
|  | 44 | BLDPICK(PL,PRSIEN) ; Build option pick list with memo, prior ESR, | 
|---|
|  | 45 | ; current ESR and next ESR actions in the PL array | 
|---|
|  | 46 | ;PPE,I - current Pay period  (E)xternal (I)nternal entry # | 
|---|
|  | 47 | ;NXPPE | 
|---|
|  | 48 | ;PI - picklist counter/array subscript | 
|---|
|  | 49 | ;MAI - memo action counter | 
|---|
|  | 50 | ;AMIEN - active memo ien for a prior pay period | 
|---|
|  | 51 | ;Get any actions required for Memorandum. | 
|---|
|  | 52 | N PI,PPE,NXPPE,MIEN,MAI,PPDT1,AMIEN,MTXT,RANGE,FR,TO,PRTXT | 
|---|
|  | 53 | S PI=0 | 
|---|
|  | 54 | ; get array of memos with status reconcile started | 
|---|
|  | 55 | ; this may need to be replaced with API call ### | 
|---|
|  | 56 | D GETMEMOS(.MIEN,PRSIEN,3) | 
|---|
|  | 57 | I $G(MIEN(0))>0 D | 
|---|
|  | 58 | .  S MAI=0 | 
|---|
|  | 59 | .  F  S MAI=$O(MIEN(MAI)) Q:MAI'>0  D | 
|---|
|  | 60 | ..   Q:$P($G(^PRST(458.7,MAI,2)),U)>0 | 
|---|
|  | 61 | ..   S PI=PI+1,PL(PI)=$$BLDMACT(MAI,MIEN(MAI)) | 
|---|
|  | 62 | ; | 
|---|
|  | 63 | ;Travel ESR status xref (<4) )for incomplete ESR days | 
|---|
|  | 64 | ; | 
|---|
|  | 65 | S PRTXT="Edit ESR for PRIOR pay period " | 
|---|
|  | 66 | S PPE="" | 
|---|
|  | 67 | F  S PPE=$O(^PRST(458,"AEA",PRSIEN,PPE)) Q:PPE=""  D | 
|---|
|  | 68 | . S PPI=$O(^PRST(458,"B",PPE,0)) | 
|---|
|  | 69 | . Q:PPI'>0 | 
|---|
|  | 70 | .;### call to active memo API to determine if pp should be edited | 
|---|
|  | 71 | .;  Get 1st day of pp | 
|---|
|  | 72 | .  D NX^PRSAPPU S PPDT1=D1 | 
|---|
|  | 73 | .  S AMIEN=+$$MIEN^PRSPUT1(PRSIEN,PPDT1) | 
|---|
|  | 74 | .  I AMIEN>0 D | 
|---|
|  | 75 | ..    S PI=PI+1 | 
|---|
|  | 76 | ..    S RANGE=$G(^PRST(458,PPI,2)) | 
|---|
|  | 77 | ..    S FR=$P(RANGE,U,1),TO=$P(RANGE,U,14) | 
|---|
|  | 78 | ..    S MTXT=PRTXT_PPE_" ["_FR_" - "_TO_"]" | 
|---|
|  | 79 | ..    S PL(PI)="P^"_PPI_"^"_AMIEN_U_MTXT | 
|---|
|  | 80 | ; | 
|---|
|  | 81 | ;  current pay period to list, overwrite PI array if current | 
|---|
|  | 82 | ; pay period is also a prior pay period selection already | 
|---|
|  | 83 | N PPE,PPI,PP4Y,DAY,D1,PPDT1,AMIEN,OVRITE | 
|---|
|  | 84 | S (PPDT1,D1)=DT D PP^PRSAPPU | 
|---|
|  | 85 | I PPI'="" D | 
|---|
|  | 86 | .  S OVRITE=$$PPICHK(.PL,PPI) | 
|---|
|  | 87 | .  I OVRITE>0 S PI=OVRITE | 
|---|
|  | 88 | .  E  S PI=PI+1 | 
|---|
|  | 89 | .  S AMIEN=+$$MIEN^PRSPUT1(PRSIEN,PPDT1) | 
|---|
|  | 90 | .  I AMIEN>0 D | 
|---|
|  | 91 | ..    S RANGE=$G(^PRST(458,PPI,2)) | 
|---|
|  | 92 | ..    S FR=$P(RANGE,U,1),TO=$P(RANGE,U,14) | 
|---|
|  | 93 | ..    S MTXT="Edit ESR for CURRENT pay period "_PPE_" ["_FR_" - "_TO_"]" | 
|---|
|  | 94 | ..    S PL(PI)="C^"_PPI_U_AMIEN_U_MTXT | 
|---|
|  | 95 | ; | 
|---|
|  | 96 | ; add next pay period to list if open and covered by memo | 
|---|
|  | 97 | S PPE=$E($$NXTPP^PRSAPPU(PPE),3,7) | 
|---|
|  | 98 | D NX^PRSAPPU S PPDT1=D1 | 
|---|
|  | 99 | I $D(^PRST(458,"B",PPE)) D | 
|---|
|  | 100 | .  S PPI=$O(^PRST(458,"B",PPE,0)) | 
|---|
|  | 101 | .  S AMIEN=+$$MIEN^PRSPUT1(PRSIEN,PPDT1) | 
|---|
|  | 102 | .  I AMIEN>0 D | 
|---|
|  | 103 | ..   S OVRITE=$$PPICHK(.PL,PPI) | 
|---|
|  | 104 | ..   I OVRITE>0 S PI=OVRITE | 
|---|
|  | 105 | ..   E  S PI=PI+1 | 
|---|
|  | 106 | ..   S RANGE=$G(^PRST(458,PPI,2)) | 
|---|
|  | 107 | ..   S FR=$P(RANGE,U,1),TO=$P(RANGE,U,14) | 
|---|
|  | 108 | ..   S MTXT="Edit ESR for NEXT pay period "_PPE_" ["_FR_" - "_TO_"]" | 
|---|
|  | 109 | ..   S PL(PI)="N^"_PPI_"^"_AMIEN_U_MTXT | 
|---|
|  | 110 | ; | 
|---|
|  | 111 | Q | 
|---|
|  | 112 | ; | 
|---|
|  | 113 | PPICHK(PRIARY,PPCH) ; Check if Current or next is already in prior array | 
|---|
|  | 114 | ;  RETURN PPI IF FOUND | 
|---|
|  | 115 | N FOUND,PRNODE | 
|---|
|  | 116 | S FOUND=0,PRNODE=99 | 
|---|
|  | 117 | F  S PRNODE=$O(PRIARY(PRNODE),-1) Q:(PRNODE'>0)!(FOUND>0)  D | 
|---|
|  | 118 | .  I PPCH=$P($G(PRIARY(PRNODE)),U,2) S FOUND=PRNODE | 
|---|
|  | 119 | Q FOUND | 
|---|
|  | 120 | ; | 
|---|
|  | 121 | BLDMACT(MIEN,ZNODE) ;with zero node of memo build the item screen | 
|---|
|  | 122 | ; Sample appearance for menu item | 
|---|
|  | 123 | N SDT,EDT,TDT,Y,MENUTXT | 
|---|
|  | 124 | S MENUTXT="M^"_MIEN_"^^Reconcile Prior Memorandum from " | 
|---|
|  | 125 | ; Reconcile Prior Memorandum from JUL 2004 TO JUL 2005 | 
|---|
|  | 126 | S SDT=$P(ZNODE,U),EDT=$P(ZNODE,U,2),TDT=$P(ZNODE,U,3) | 
|---|
|  | 127 | I $G(TDT)>0,($G(TDT)<$G(EDT)) S EDT=TDT | 
|---|
|  | 128 | S Y=SDT D DD^%DT S SDT=Y | 
|---|
|  | 129 | S Y=EDT D DD^%DT S EDT=Y | 
|---|
|  | 130 | S MENUTXT=MENUTXT_SDT_" TO "_EDT | 
|---|
|  | 131 | Q MENUTXT | 
|---|
|  | 132 | CHOICE(PL,DEF) ; return users choice from array of items in PL | 
|---|
|  | 133 | ; return 0 for abort | 
|---|
|  | 134 | N ITEM,ICNT,DIR,DIRUT | 
|---|
|  | 135 | S ICNT=0 | 
|---|
|  | 136 | I $G(DEF)>0,($G(PL(DEF))'="") D | 
|---|
|  | 137 | .  S DIR("B")=DEF | 
|---|
|  | 138 | S ITEM=0 | 
|---|
|  | 139 | F  S ITEM=$O(PL(ITEM)) Q:ITEM'>0  D | 
|---|
|  | 140 | .  S DIR("A",ITEM)=ITEM_". "_$P($G(PL(ITEM)),U,4) | 
|---|
|  | 141 | .  S ICNT=ICNT+1 | 
|---|
|  | 142 | S DIR(0)="NO^1:"_ICNT_":0" | 
|---|
|  | 143 | S DIR("A")="Select an Item " | 
|---|
|  | 144 | D ^DIR | 
|---|
|  | 145 | S PICK=+$G(Y) | 
|---|
|  | 146 | I $G(DIRUT) S PICK=0 | 
|---|
|  | 147 | Q PICK | 
|---|
|  | 148 | ; | 
|---|
|  | 149 | GETMEMOS(MIEN,PRSIEN,MSTAT) ; Return IEN subscripted array of | 
|---|
|  | 150 | ;  memorandums in a single status (MSTAT) | 
|---|
|  | 151 | ;  INPUT:  EMPLOYEE IEN (PRSIEN) | 
|---|
|  | 152 | ;          STATUS OF MEMORANDUM desired (MSTAT) | 
|---|
|  | 153 | ;          1:NOT STARTED; 2:ACTIVE; 3:RECONCILIATION STARTED; | 
|---|
|  | 154 | ;          4:RECONCILED; | 
|---|
|  | 155 | ;  OUTPUT: returns MIEN array as follows: | 
|---|
|  | 156 | ;          MIEN(0) = 0 when no reconcile actions: | 
|---|
|  | 157 | ;            OR | 
|---|
|  | 158 | ;          MIEN(0) = integer # of memos that requires reconcile action: | 
|---|
|  | 159 | ;          MIEN(IEN 1)=start date^end date^termination date | 
|---|
|  | 160 | ;          MIEN(IEN n)=start date n ^end date n ^termination date n | 
|---|
|  | 161 | N ZNODE,TDT,TMPMIEN | 
|---|
|  | 162 | S MIEN(0)=0 | 
|---|
|  | 163 | Q:$G(MSTAT)'>0!($G(PRSIEN)'>0) | 
|---|
|  | 164 | S TMPMIEN=0 | 
|---|
|  | 165 | F  S TMPMIEN=$O(^PRST(458.7,"AST",PRSIEN,MSTAT,TMPMIEN)) Q:TMPMIEN'>0  D | 
|---|
|  | 166 | .  S ZNODE=$G(^PRST(458.7,TMPMIEN,0)) | 
|---|
|  | 167 | .  S TDT=$P($G(^PRST(458.7,TMPMIEN,4)),U) | 
|---|
|  | 168 | .  S MIEN(TMPMIEN)=$P(ZNODE,U,2)_"^"_$P(ZNODE,U,3)_"^"_TDT | 
|---|
|  | 169 | .  S MIEN(0)=MIEN(0)+1 | 
|---|
|  | 170 | Q | 
|---|
|  | 171 | ; | 
|---|
|  | 172 | MEMO(PRSIEN,LIST) ; CALL OPTION TO RECONCILE A MEMO | 
|---|
|  | 173 | ;INPUT : PRSIEN-user 450 ien,  LIST-pick list array item for memo | 
|---|
|  | 174 | N OUT,MIEN | 
|---|
|  | 175 | S MIEN=$P(LIST,U,2) | 
|---|
|  | 176 | D MAIN^PRSPSRC(PRSIEN,MIEN) | 
|---|
|  | 177 | S OUT=$$ASK^PRSLIB00() | 
|---|
|  | 178 | Q | 
|---|
|  | 179 | ESR(PRSIEN,PPI,MIEN,OUT) ; DISPLAY PAY PERIOD AND ASK USER TO PICK A DAY | 
|---|
|  | 180 | ;  WHEN THEY PICK A DAY CALL code to start up a ScreenMan | 
|---|
|  | 181 | ;  form for the day record | 
|---|
|  | 182 | N ESRDAY | 
|---|
|  | 183 | S OUT=0 | 
|---|
|  | 184 | F  D  Q:(ESRDAY'>0) | 
|---|
|  | 185 | . W @IOF | 
|---|
|  | 186 | . D WSS(PRSIEN,PPI,MIEN) | 
|---|
|  | 187 | . S ESRDAY=$$WHICHDAY(PPI,PRSIEN) | 
|---|
|  | 188 | . I $$CANPOST(PPI,PRSIEN,ESRDAY,1) D ESRFRM^PRSPESR1(PRSIEN,PPI,ESRDAY) | 
|---|
|  | 189 | I ESRDAY<0 S OUT=1 | 
|---|
|  | 190 | Q | 
|---|
|  | 191 | CANPOST(PPI,PRSIEN,PRSD,SHMSG) ; Can this day be posted by a PTP? | 
|---|
|  | 192 | ; i show message set to 1 then show message on can't post | 
|---|
|  | 193 | N CANPOST | 
|---|
|  | 194 | S CANPOST=0 | 
|---|
|  | 195 | Q:$G(PRSD)'>0 CANPOST | 
|---|
|  | 196 | N TCSTAT,DUM,ESRSTAT,TCSTAT,TOUR | 
|---|
|  | 197 | S CANPOST=1 | 
|---|
|  | 198 | ; | 
|---|
|  | 199 | S TOUR=$P($G(^PRST(458,PPI,"E",PRSIEN,"D",PRSD,0)),U,2) | 
|---|
|  | 200 | I TOUR'>0 S CANPOST=0 D  Q CANPOST | 
|---|
|  | 201 | .  I 'CANPOST&($G(SHMSG)>0) D | 
|---|
|  | 202 | ..   W @IOF,!!!,"A Tour of Duty must be entered first.  Please contact your timekeeper.",!! | 
|---|
|  | 203 | ..   S DUM=$$ASK^PRSLIB00(1) | 
|---|
|  | 204 | ; | 
|---|
|  | 205 | S ESRSTAT=$$GETSTAT^PRSPESR1(PRSIEN,PPI,PRSD) | 
|---|
|  | 206 | S TCSTAT=$$TCSTAT^PRSPSAP2(PPI,PRSIEN) | 
|---|
|  | 207 | I TCSTAT'="T" S CANPOST=(ESRSTAT<5) D | 
|---|
|  | 208 | .  I 'CANPOST&($G(SHMSG)>0) D | 
|---|
|  | 209 | ..   W @IOF,!!!,"Only select days with status 'Not Started, 'Pending', 'Signed', or 'Resubmit'." | 
|---|
|  | 210 | ..   W !,"To edit approved days or days off, contact your Time and Leave Supervisor.",!! | 
|---|
|  | 211 | ..   S DUM=$$ASK^PRSLIB00(1) | 
|---|
|  | 212 | Q CANPOST | 
|---|
|  | 213 | ; | 
|---|
|  | 214 | WSS(PRSIEN,PPI,MIEN) ; WORK SUMMARY SCREEN | 
|---|
|  | 215 | N SCRTTL | 
|---|
|  | 216 | S SCRTTL="Work Summary Screen for Part Time VA Physician " | 
|---|
|  | 217 | D HDR^PRSPUT1(PRSIEN,SCRTTL,,,PPI) | 
|---|
|  | 218 | D MEM^PRSPUT1(PRSIEN,MIEN) | 
|---|
|  | 219 | D AL^PRSPUT3(PRSIEN,) | 
|---|
|  | 220 | D ESRSTAT^PRSPUT2(PRSIEN,PPI) | 
|---|
|  | 221 | Q | 
|---|
|  | 222 | WHICHDAY(PPI,PRSIEN,DEF) ; ASK USER TO SELECT A PAY PERIOD DAY | 
|---|
|  | 223 | ; return 0 for abort OR -1 for double abort "^^" | 
|---|
|  | 224 | N DIR,DIRUT,TCSTAT,I | 
|---|
|  | 225 | S DIR(0)="NO^1:14:0" | 
|---|
|  | 226 | I $G(DEF)>0 S DIR("B")=DEF | 
|---|
|  | 227 | S DIR("A")="Select day " | 
|---|
|  | 228 | D ^DIR | 
|---|
|  | 229 | I $G(DIRUT) D | 
|---|
|  | 230 | .  S PICK=$S($G(Y)["^^":-1,1:0) | 
|---|
|  | 231 | E  D | 
|---|
|  | 232 | .  S PICK=$G(Y) | 
|---|
|  | 233 | Q PICK | 
|---|
|  | 234 | Q | 
|---|