Index: WorldVistAEHR/trunk/r/PAID-PRS/PRSAENT.m
===================================================================
--- WorldVistAEHR/trunk/r/PAID-PRS/PRSAENT.m	(revision 613)
+++ WorldVistAEHR/trunk/r/PAID-PRS/PRSAENT.m	(revision 623)
@@ -1,203 +1,201 @@
-PRSAENT	;HISC/MGD-Entitlement String ;10/21/04
-	;;4.0;PAID;**6,21,45,69,75,76,90,96,112**;Sep 21, 1995;Build 54
-	;;Per VHA Directive 2004-038, this routine should not be modified.
-	;
-	;VARS:
-	; C0=employees 0 node of master record in file 450
-	; NH= employees 8B normal hours
-	; FLX= compressed/flextime code (0=none,C=compressed,F=flextime)
-	; PMP= premium pay indicator 
-	;     ( D = entitled Sun.,   F = entitled Sat./Sun.,
-	;       E = entitled variable Sat./Sun. premium pay,
-	;       G = entitled variable Sun. prem pay
-	;       X = title 5 employees
-	;       R, C, O = 3 types of firefighters )
-	; AC= 3 single char codes concat. w/o delims + a possible 4th char.
-	; AC= PP_DutyBasis(full-1,part-2,intermit-3)_FLSA(E=Exempt,N=NonExempt)
-	;     _(*EWXY8BT02S9P)
-	; PP= employees pay plan (possible chars 0AEFGJKLMNPQRSTUWXY)
-	; PB= pay basis-code for time condition for computing pay.
-	; TA= type of appointment (career, career conditional, etc.)
-	; OCC= 4 digit cost center for fund appropriation accounting
-	; LVG= one digit code for employees leave group.
-	; ASS= specialty assignment of physicians,dentists, nurses,
-	;      summer employees,trainees and other special programs.
-	; ENT= 39 character entitlement string
-	; PMP = Premium Pay Code
-	;
-	N PAYPDTMP,PPLOLD,DUTYTEMP,FLSATEMP
-	;
-	S C0=^PRSPC(DFN,0)
-	;
-	; pay plan in master record.
-	S PP=$P(C0,"^",21)
-	;
-	;=====================================================================
-	; duty basis from master record
-	S DUTYTEMP=$P(C0,"^",10)
-	;
-	; FLSA indicator from master record
-	S FLSATEMP=$P(C0,"^",12)
-	;
-	;Make sure we've called this routine from an entry point that uses
-	;PY for pay period.  A few reports, call PRSAENT from TYPSTF^PRSRUT0
-	;and the reports aren't concerned about differing pay plans from 
-	;other pay periods.
-	;
-	I +($G(PY))>0 D
-	.S PAYPDTMP=$P($G(^PRST(458,+PY,0)),"^") ;pay period we're working with.
-	.S PPLOLD=$$OLDPP^PRS8UT(PAYPDTMP,+DFN) ;pay plan from PAYPDTMP.
-	.;if we find an old pay plan and it's different than the master record
-	.;use the old pay plan to determine VCS or FEE.
-	.I PPLOLD'=0,(PP'=PPLOLD) D
-	..   S PP=PPLOLD
-	..   S DUTYTEMP=OLDPP("DUTYBS")
-	;=====================================================================
-	;
-	; Numeric Pay plans are all Wage grade. Set them to 0.
-	S:PP?1N PP=0
-	;
-	;
-	S:"BC"[PP PP="A"
-	I "0AEFGJKLMNPQRSTUWXY"'[PP D NO Q
-	S NH=+$P(C0,"^",16)
-	S FLX=$P($G(^PRSPC(DFN,1)),"^",7)
-	S PMP=$P($G(^PRSPC(DFN,"PREMIUM")),"^",6)
-	S AC=PP_DUTYTEMP_FLSATEMP
-	I $L(AC)'=3 D NO Q
-	;
-	;
-	D @PP
-	D FND
-	Q
-	;===========================================================
-	;
-0	Q
-	;
-A	;patch 45: firefighters entitlements are based on PMP Codes.  
-	; Code O still uses nh>80 to determine entitlement. 
-	I "RC"[PMP S AC=AC_PMP Q
-	;
-	;This check does not concern itself with whether or not a code
-	; O is present.  Simply if not a code R or C then an over 80
-	; must be a code O firefighter under the rules implemented in 
-	; patch 45.  
-	;
-	I "CR"'[PMP,NH>80 S AC=AC_"*" Q
-	;
-	Q:PMP=""
-	I $E(AC,2)'=3,"WXY"[PMP S AC=AC_PMP Q
-	S:"EF"[PMP AC=AC_"E"
-	;The following check is for Public Law 108-170
-	S:"STUV"[PMP AC=AC_PMP
-	Q
-E	Q
-F	Q
-G	I $E(AC,2)<3 Q
-	S TA=$P(C0,"^",43) S:TA=8 AC=AC_"8" Q
-J	Q
-K	S:NH=48 AC=AC_"B" Q
-L	I $E(AC,2)=2 S PB=$P(C0,"^",20) S:PB=0 AC=AC_"*" Q
-	I $E(AC,2)=3 S OCC=$P(C0,"^",17),OCC=+$E(OCC,5,6) S:OCC>20&(OCC<38) AC=AC_"*" Q
-	S LVG=$P(C0,"^",15) S:LVG=5 AC=AC_"*" Q
-M	I $E(AC,2)=1,NH=48 S AC=AC_"B" Q
-	I $E(AC,2)=2,NH=80 S AC=AC_"R" Q
-	I $E(AC,2)=2 S PB=$P(C0,"^",20) I PB=0 S AC=AC_"0" Q
-	I $E(AC,2)=3 S PB=$P(C0,"^",20) I PB=2 S AC=AC_"2" Q
-	S OCC=$P(C0,"^",17) S:OCC="" OCC="*"
-	S:" 061056 061057 "[OCC AC=AC_"T"
-	S:" 061071 061072 061080 061083 061084 "[OCC AC=AC_"T"
-	S:" 060552 060556 "[OCC AC=AC_"T" Q
-N	S ASS=$P(C0,"^",4),PB=$P(C0,"^",20)
-	;The following check is for Public Law 108-170
-	I "^S^T^U^V^"[("^"_PMP_"^") S AC=AC_PMP Q
-	I AC="N2E",PB=0 S AC=AC_"0" Q
-	I $E(AC,2)=3,PB="S" S AC=AC_"$" Q
-	S OCC=$P(C0,"^",17) S:OCC="" OCC="*"
-	I OCC="069961" S AC=AC_"T" Q  ; Student Nurse Technician
-	I OCC="069964" S AC=AC_"T" Q  ; Student Nurse Technician
-	S AC=AC_$S(ASS="TR":"T",ASS?1"T"1N:"T",ASS?1"A"1N:"T",1:"") Q
-P	Q
-Q	I $E(AC,2)'=2 Q
-	S PB=$P(C0,"^",20) S:PB=0 AC=AC_"0" Q
-R	Q
-S	Q
-T	I $E(AC,2)'=3 Q
-	S PB=$P(C0,"^",20) S:PB=9 AC=AC_"9" Q
-U	S PB=$P(C0,"^",20) I $E(AC,3)="N",PB="P" S AC=AC_"P"
-	Q
-W	Q
-X	S:'NH AC=AC_"0" Q
-Y	Q
-	;
-	;= = = = = = = = = = = = = = = = = = = = = = = =
-FND	;Look up the 39 character entitlement string in the entitlement table
-	;The lookup is based on the AC x-ref that matches the AC variable that
-	;is built in this routine from the three 1 character codes from the 
-	;450 fields (pay plan, duty basis, FLSA).
-	;
-	S A1=$O(^PRST(457.5,"AC",AC,0))
-	D NO
-	I +A1 S ENT=^PRST(457.5,A1,1)
-	; The following check was added to address the Hybrid employees
-	; defined in Public Law 107-135.  These Hybrids do not have a
-	; Premium Pay Indicator but are entitled to Saturday and Sunday
-	; Premium Pay.
-	I $$HYBRID^PRSAENT1(DFN) D
-	. S $E(ENT,8,9)="11"
-	;
-	Q
-	;= = = = = = = = = = = = = = = = = = = = = = = =
-NO	S ENT=""
-	Q
-	;
-MLINHRS(IEN)	; 
-	;----------------------------------------------------------------------
-	; Determine if the employee is entitled to Military Leave in hours.
-	;
-	; Input Vars:
-	;  IEN - the ien number of the employee in the PAID EMPLOYEE (#450)
-	;        file.
-	;
-	; Local Vars:
-	;  DATA - the 0 node of the employee from the PAID EMPLOYEE (#450)
-	;         file.
-	;    DB - Duty Basis    field #9    from the #450 file.
-	;    NH - Normal Hours  field # 15  from the #450 file.
-	;    PP - Pay Plan      field # 20  from the #450 file.
-	;
-	; Output:
-	;  1 : Entitled to ML in hours.
-	;  0 : Entitled to ML in days.
-	;  X : Some of the required fields were not defined or the employee
-	;      is not entitled to Military Leave.
-	;----------------------------------------------------------------------
-	; Quit if no IEN passed in
-	;
-	Q:'+IEN "X"
-	;
-	; Verify that ENT is defined.  If not call PRSAENT to define it.
-	;
-	I '$D(ENT) D PRSAENT
-	;
-	; Quit if the Entitlement string is not defined for the employee
-	;
-	Q:ENT="" "X"
-	;
-	; Quit if the employee is not entitled to Military Leave
-	;
-	Q:'$E(ENT,34) "X"
-	;
-	N DATA,PP,DB,NH
-	S DATA=$G(^PRSPC(IEN,0))
-	Q:DATA="" "X"
-	S DB=$P(DATA,U,10),NH=$P(DATA,U,16),PP=$P(DATA,U,21)
-	Q:DB=""!(NH="")!(PP="") "X" ; Quit if DB or NH or PP is not defined.
-	;
-	; Check for ML in Days
-	;
-	I DB=1,NH=0,"^J^L^P^Q^X^"[PP  Q 0
-	;
-	; Otherwise the employee is entitled to ML in hours.
-	;
-	Q 1
+PRSAENT ;HISC/MGD-Entitlement String ;10/21/04
+ ;;4.0;PAID;**6,21,45,69,75,76,90,96**;Sep 21, 1995
+ ;
+ ;VARS:
+ ; C0=employees 0 node of master record in file 450
+ ; NH= employees 8B normal hours
+ ; FLX= compressed/flextime code (0=none,C=compressed,F=flextime)
+ ; PMP= premium pay indicator 
+ ;     ( D = entitled Sun.,   F = entitled Sat./Sun.,
+ ;       E = entitled variable Sat./Sun. premium pay,
+ ;       G = entitled variable Sun. prem pay
+ ;       X = title 5 employees
+ ;       R, C, O = 3 types of firefighters )
+ ; AC= 3 single char codes concat. w/o delims + a possible 4th char.
+ ; AC= PP_DutyBasis(full-1,part-2,intermit-3)_FLSA(E=Exempt,N=NonExempt)
+ ;     _(*EWXY8BT02S9P)
+ ; PP= employees pay plan (possible chars 0AEFGJKLMNPQRSTUWXY)
+ ; PB= pay basis-code for time condition for computing pay.
+ ; TA= type of appointment (career, career conditional, etc.)
+ ; OCC= 4 digit cost center for fund appropriation accounting
+ ; LVG= one digit code for employees leave group.
+ ; ASS= specialty assignment of physicians,dentists, nurses,
+ ;      summer employees,trainees and other special programs.
+ ; ENT= 39 character entitlement string
+ ; PMP = Premium Pay Code
+ ;
+ N PAYPDTMP,PPLOLD,DUTYTEMP,FLSATEMP
+ ;
+ S C0=^PRSPC(DFN,0)
+ ;
+ ; pay plan in master record.
+ S PP=$P(C0,"^",21)
+ ;
+ ;=====================================================================
+ ; duty basis from master record
+ S DUTYTEMP=$P(C0,"^",10)
+ ;
+ ; FLSA indicator from master record
+ S FLSATEMP=$P(C0,"^",12)
+ ;
+ ;Make sure we've called this routine from an entry point that uses
+ ;PY for pay period.  A few reports, call PRSAENT from TYPSTF^PRSRUT0
+ ;and the reports aren't concerned about differing pay plans from 
+ ;other pay periods.
+ ;
+ I +($G(PY))>0 D
+ .S PAYPDTMP=$P($G(^PRST(458,+PY,0)),"^") ;pay period we're working with.
+ .S PPLOLD=$$OLDPP^PRS8UT(PAYPDTMP,+DFN) ;pay plan from PAYPDTMP.
+ .;if we find an old pay plan and it's different than the master record
+ .;use the old pay plan to determine VCS or FEE.
+ .I PPLOLD'=0,(PP'=PPLOLD) D
+ ..   S PP=PPLOLD
+ ..   S DUTYTEMP=OLDPP("DUTYBS")
+ ;=====================================================================
+ ;
+ ; Numeric Pay plans are all Wage grade. Set them to 0.
+ S:PP?1N PP=0
+ ;
+ ;
+ S:"BC"[PP PP="A"
+ I "0AEFGJKLMNPQRSTUWXY"'[PP D NO Q
+ S NH=+$P(C0,"^",16)
+ S FLX=$P($G(^PRSPC(DFN,1)),"^",7)
+ S PMP=$P($G(^PRSPC(DFN,"PREMIUM")),"^",6)
+ S AC=PP_DUTYTEMP_FLSATEMP
+ I $L(AC)'=3 D NO Q
+ ;
+ ;
+ D @PP
+ D FND
+ Q
+ ;===========================================================
+ ;
+0 Q
+ ;
+A ;patch 45: firefighters entitlements are based on PMP Codes.  
+ ; Code O still uses nh>80 to determine entitlement. 
+ I "RC"[PMP S AC=AC_PMP Q
+ ;
+ ;This check does not concern itself with whether or not a code
+ ; O is present.  Simply if not a code R or C then an over 80
+ ; must be a code O firefighter under the rules implemented in 
+ ; patch 45.  
+ ;
+ I "CR"'[PMP,NH>80 S AC=AC_"*" Q
+ ;
+ Q:PMP=""
+ I $E(AC,2)'=3,"WXY"[PMP S AC=AC_PMP Q
+ S:"EF"[PMP AC=AC_"E"
+ ;The following check is for Public Law 108-170
+ S:"STUV"[PMP AC=AC_PMP
+ Q
+E Q
+F Q
+G I $E(AC,2)<3 Q
+ S TA=$P(C0,"^",43) S:TA=8 AC=AC_"8" Q
+J Q
+K S:NH=48 AC=AC_"B" Q
+L I $E(AC,2)=2 S PB=$P(C0,"^",20) S:PB=0 AC=AC_"*" Q
+ I $E(AC,2)=3 S OCC=$P(C0,"^",17),OCC=+$E(OCC,5,6) S:OCC>20&(OCC<38) AC=AC_"*" Q
+ S LVG=$P(C0,"^",15) S:LVG=5 AC=AC_"*" Q
+M I $E(AC,2)=1,NH=48 S AC=AC_"B" Q
+ I $E(AC,2)=2 S PB=$P(C0,"^",20) I PB=0 S AC=AC_"0" Q
+ I $E(AC,2)=3 S PB=$P(C0,"^",20) I PB=2 S AC=AC_"2" Q
+ S OCC=$P(C0,"^",17) S:OCC="" OCC="*"
+ S:" 061056 061057 "[OCC AC=AC_"T"
+ S:" 061071 061072 061080 061083 061084 "[OCC AC=AC_"T"
+ S:" 060552 060556 "[OCC AC=AC_"T" Q
+N S ASS=$P(C0,"^",4),PB=$P(C0,"^",20)
+ ;The following check is for Public Law 108-170
+ I "^S^T^U^V^"[("^"_PMP_"^") S AC=AC_PMP Q
+ I AC="N2E",PB=0 S AC=AC_"0" Q
+ I $E(AC,2)=3,PB="S" S AC=AC_"$" Q
+ S OCC=$P(C0,"^",17) S:OCC="" OCC="*"
+ I OCC="069961" S AC=AC_"T" Q  ; Student Nurse Technician
+ I OCC="069964" S AC=AC_"T" Q  ; Student Nurse Technician
+ S AC=AC_$S(ASS="TR":"T",ASS?1"T"1N:"T",ASS?1"A"1N:"T",1:"") Q
+P Q
+Q I $E(AC,2)'=2 Q
+ S PB=$P(C0,"^",20) S:PB=0 AC=AC_"0" Q
+R Q
+S Q
+T I $E(AC,2)'=3 Q
+ S PB=$P(C0,"^",20) S:PB=9 AC=AC_"9" Q
+U S PB=$P(C0,"^",20) I $E(AC,3)="N",PB="P" S AC=AC_"P"
+ Q
+W Q
+X S:'NH AC=AC_"0" Q
+Y Q
+ ;
+ ;= = = = = = = = = = = = = = = = = = = = = = = =
+FND ;Look up the 39 character entitlement string in the entitlement table
+ ;The lookup is based on the AC x-ref that matches the AC variable that
+ ;is built in this routine from the three 1 character codes from the 
+ ;450 fields (pay plan, duty basis, FLSA).
+ ;
+ S A1=$O(^PRST(457.5,"AC",AC,0))
+ D NO
+ I +A1 S ENT=^PRST(457.5,A1,1)
+ ; The following check was added to address the Hybrid employees
+ ; defined in Public Law 107-135.  These Hybrids do not have a
+ ; Premium Pay Indicator but are entitled to Saturday and Sunday
+ ; Premium Pay.
+ I $$HYBRID^PRSAENT1(DFN) D
+ . S $E(ENT,8,9)="11"
+ ;
+ Q
+ ;= = = = = = = = = = = = = = = = = = = = = = = =
+NO S ENT=""
+ Q
+ ;
+MLINHRS(IEN) ; 
+ ;----------------------------------------------------------------------
+ ; Determine if the employee is entitled to Military Leave in hours.
+ ;
+ ; Input Vars:
+ ;  IEN - the ien number of the employee in the PAID EMPLOYEE (#450)
+ ;        file.
+ ;
+ ; Local Vars:
+ ;  DATA - the 0 node of the employee from the PAID EMPLOYEE (#450)
+ ;         file.
+ ;    DB - Duty Basis    field #9    from the #450 file.
+ ;    NH - Normal Hours  field # 15  from the #450 file.
+ ;    PP - Pay Plan      field # 20  from the #450 file.
+ ;
+ ; Output:
+ ;  1 : Entitled to ML in hours.
+ ;  0 : Entitled to ML in days.
+ ;  X : Some of the required fields were not defined or the employee
+ ;      is not entitled to Military Leave.
+ ;----------------------------------------------------------------------
+ ; Quit if no IEN passed in
+ ;
+ Q:'+IEN "X"
+ ;
+ ; Verify that ENT is defined.  If not call PRSAENT to define it.
+ ;
+ I '$D(ENT) D PRSAENT
+ ;
+ ; Quit if the Entitlement string is not defined for the employee
+ ;
+ Q:ENT="" "X"
+ ;
+ ; Quit if the employee is not entitled to Military Leave
+ ;
+ Q:'$E(ENT,34) "X"
+ ;
+ N DATA,PP,DB,NH
+ S DATA=$G(^PRSPC(IEN,0))
+ Q:DATA="" "X"
+ S DB=$P(DATA,U,10),NH=$P(DATA,U,16),PP=$P(DATA,U,21)
+ Q:DB=""!(NH="")!(PP="") "X" ; Quit if DB or NH or PP is not defined.
+ ;
+ ; Check for ML in Days
+ ;
+ I DB=1,NH=0,"^J^L^P^Q^X^"[PP  Q 0
+ ;
+ ; Otherwise the employee is entitled to ML in hours.
+ ;
+ Q 1
