[{TableOfContents }]
!!!CREATE PAY HISTORY INTERFACE
The system allows you to generate an interface file from pay history information for the pay headers and the associated information such as Pay Lines, Pay Line Details, Pay Amounts or the Journal Entries depending on the interface level. The employee's basic information such as Personals, Employments, Prime Assignments, Entities, Locations, Jobs, Positions, Departments, Units, Groups can also be used for the interface file. 

You define the interface file layout on [IDIF] screen.

!!Setup Step 1 - Define Lexicons in [IMLN]
The following lexicons are provided by [{$applicationname}] and used for UPPHF Pay History Interface.
![X_INTERFACE_TYPE]
The following value from X_INTERFACE_TYPE must be used for [IDIF] screen Interface Type field:32 - Pay History Interface
*[X_INTERFACE_UPPHF]
X_INTERFACE_UPPHF is used on UPPHF selection criteria screen for Interface Level parameter:
;01 - Pay Headers:Generate interface file with Pay Headers, Pay Amounts and employee basic information.\\This is used when Interface File requires Element amounts without detail information from Pay Lines, performance for this Interface level will be better than '02' level.
;02 - Pay Headers + Pay Lines:Generate interface file with Pay Headers, Pay Lines, Pay Line Details, Pay Amounts and employee basic information.\\This is used when Interface File requires Amounts or Element amounts from Pay Lines level and information such as Cost Center, Work Order etc, performance for this Interface level will be slower than '01' level.
;10 - Journal Entries:Generate interface file with Pay Headers, Journal Entries, Journal Details and employee basic information\\This is used when Interface File requires Journal Entries information, performance for this Interface level will be slower than '01' level

*[X_INF_VARIABLE_NAME]
X_INF_VARIABLE_NAME contains a list of system defined variables that are eligible by Interface type.  The following list describes each variable and the usage for [Interface Type 32 - Pay History Interface|X_INF_VARIABLE_NAME (32)]


!!Setup Step 2 - Define Interface Format in [IDIF]

!Fixed File Format
The system provides SEED_IDIF_HL$_UPPHF_ADMIN.sql script to load in [HL$UPPHF-ADMIN] as an example of a fixed format interface file. You should use (Copy Definition) to copy the script into a different Interface code and then enter their own company data.

IDIF field descriptions:

;Code:User defined Interface Code\\If IDIF layout is supplied by the system, the Interface Code begins with HL$
;Interface Type:Must be 32 - Pay History Interface
;File Format:Specifies one of the File Formats from look up list
;Form Type:Please select 'Not Specified' from look up list, Form Type is not used for UPPHF
;Description:User defined description
;File Name:Specifies the default file name, otherwise file name is entered on UPPHF parameter.  If you use the tokens ''MEX'' or ''DATE'' or ''TIME'' these will be replaced as noted in [P2K_PU.FILE_NAME].  In Non-Trial mode, with ’92-Update Record’ Type and Variable 320016, the File Name will be updated according to the Derivation Expression 
;File Creation Number: Specifies the beginning number to be used as File Creation Number. If this field is NULL, when IDIF Record is referencing Variable 320017-IDIF File Creation Number (32), then the default File Creation Number is treated as 0. In Non-Trial mode, with ’92-Update Record’ Type and Variable 320017, the File Creation Number will be updated according to the Derivation Expression e.g. to increment by 1, in Derivation Expression field, enter  ~ + 1
;Taxation Level:Please select 'Not Specified' from look up list, Taxation Level is not used for UPPHF
;Record Number:User assigned Record Number\\Each Record Number generates a new line in the interface file.\\The followings are suggested Record Numbers, user can set up their own numbers.
||Record Number||Interface File Records generated
|0|Qualify Records
|1 - 29|Header Records
|30 - 69|Detail Records
|70 - 99|Trailer Records or Update Records
;Field Number:User assigned number
;Name:User assigned field name
;XML Tag:Optional, used for XML File Format only\\If XML Tag is not specified for XML File, then the Name field is used as XML Tag
;Beginning Position:If File Format = 'Fixed Format', you must specify the Beginning position
;Ending Position:If File Format = 'Fixed Format', you must specify the Ending position\\  \\These positions must be continuous without gap, otherwise an error situation will occur.\\  \\Beginning/Ending positions are not needed for xml and other file format.
;Field Type:Indicate the result of the Field Variable is a type of 'Char', 'Number' or 'Date'
;Variable Name:Select from lexicon X_INF_VARIABLE_NAME 32nnnn, refer to lexicon list above
;Sort Sequence:Specifies the Sort Sequence for this Record #, Field #\\  \\Use for Record # with Record Type = 'Detail Record' only\\  \\For Record # with Record Type = 'Detail Level 1' to 'Detail Level 5', it uses the same Sort from Record Type = 'Detail Record' so that the Detail Level n records are followed after the 'Detail Record' e.g. Interface File need to sort by: Department, Employee First Name, Last Name\\- Then for the Fld# entry that specify 'Department', enter sort sequence: 100\\- For the Fld# that specify 'Employee First Name', enter sort sequence: 150\\- For the Fld# that specify 'Employee Last Name', enter sort sequence: 200\\  \\All Sort sequences must be entered on entries with the same Record Number\\  \\Sort Sequence is not supported for XML file format because xml file may specify many different Record # to generate xml begin and end tags and the xml tags are not able to sort along with the data.\\  \\Sort Sequence is not supported if the IDIF format contains 'Pay Header Begin' or 'Pay Header Summary' because the Sorting of the Detail Record cannot carry it's associated Header/Summary Record
;Format Mask:Applicable to Numeric and Date field
;Record Type:Optional, may be used for this Interface Type\\  \\If Record Type is not specified, the following Record Number range are used:
||Record Number||Interface File Records generated
|0|Qualify Records
|1 - 29|Header Records
|30 - 69|Detail Records
| 70 - 99|Trailer Records\\  \\If Record Type is specified, lexicon X_RECORD_TYPE values are:
|00 - Not Specified|Not applicable for this Interface type
|01 - Header Record|Generate Header records at begin of file
|10 - Employer Header|Not used for UPPHF
|11 - Employer Summary|Not used for UPPHF
|12 - Employer Header 2|Not used for UPPHF
|13 - Employer Summary 2|Not used for UPPHF
|14 - Employee Header|Not used for UPPHF
|15 - Employee Summary|Not used for UPPHF
|16 - Pay Header Begin|Generate records at beginning of each Pay Header 
|17 - Pay Header Summary|Generate records at the end of each Pay Header 
|20 - Detail Record|Generate Pay Header interface records
|21 - Detail Level 1|Detail Level 1 is used for Journal Entries
|22 - Detail Level 2|Not used for UPPHF
|23 - Detail Level 3|Not used for UPPHF
|24 - Detail Level 4|Not used for UPPHF
|25 - Detail Level 5|Not used for UPPHF
|30 - Detail Summary|Not used for UPPHF
|80 - Total Record|Not used for UPPHF
|90 - Trailer Record|Generate Trailer records at end of file\\  \\May contain File totals, record counts etc
|91 - Qualify Record|Should be used for Record Number 0\\  \\The Qualify records are performed at the beginning of every Pay Header to qualify the Pay Header\\  \\You can use derivation expression to BYPASS certain criteria
|92 - Update Record|Should be defined at the end of the IDIF definition\\  \\In non-Trial mode, the UDF can be Inserted or Updated as defined in the Variable Name and Constant Value field\\  \\You can use derivation expression to BYPASS certain criteria for Update
;Record Identifier:Not used for this Interface Type
;Constant Value:If Variable Name = 'Constant Value', this field specifies the Constant Value to be used\\  \\If Variable Name = 'User Calc', this field specifies the User Calc Name\\  \\If Variable Name = 'UDF (xxx)', this field specifies the User Defined Field Name\\  \\If Variable Name = 'Statistics Amt', this field specifies the Statistics Code\\  \\If Variable Name = 'Element', this field specifies the Element Code\\  \\If Variable Name = 'Total Value', this field specifies the Rec# and Field # of the Detail Records to be totaled\\e.g. Record # 50 Field 70 is to be totaled and Total option = 'Calculate Total', then the Trailer record can report the 'Total Value', Constant value should be 5070
;Print Zero Rule:Applicable to Numeric field only, use for Record Type = 'Detail Record'\\  \\If amount is zero, this field indicates to include this amount in the interface file or not\\e.g. if the field is from 'Element Amount' and the amount is zero, the user may not want to report this amount.\\  \\If all numeric amounts are zero within one Record# and the Print Zero Rule are set to 'Do not Print zerosÃ' for each field, then this entry will not be reported on interface file.\\  \\Lexicon X_PRINT_ZERO_RULE
|00 | Not Specified
|01 | Print Zero Amounts
|02| Don't Print Zeros
;XML Tag option:Applicable to XML file, if Variable Name = 'XML begin Tag'or 'XML end Tag', this field option indicates if the XML Tag should be written.\\  \\Lexicon X_XML_TAG_OPTION
|00 | Not Specified
|01 | Optional, omit tag if null
|02| Mandatory, always write
;Accum Option:Applicable to Numeric field only, use for Record Type = 'Detail Record'\\  \\Indicate if this Record #, Field # amount should be accumulated or not\\e.g. if the field is a 'Pay Number' or 'Check Number', then do not accumulate.\\  \\If field is 'Element Value' or 'PC Amount', then you may want to accumulate to avoid writing too much detail per element or per pay component.
;Total Option:Applicable to Numeric field only, use for Record Type = Detail Record, Detail Leveln\\  \\Indicate if this Record #, Field # amount should be totaled for Header or Trailer record\\e.g. if the field is a 'FTE' or 'Rate of Pay', then do not totaled.\\  \\If field is 'Statistics Amount' or 'User Calc Amount', then you may want to calculate the total for Trailer record\\  \\Lexicon X_TOTAL_OPTION
|00 | Not Specified
|01 | Calculate Total
;Derivation Expression:Specifies the derivation expression for the Variable name.\\  \\This derivation expression will apply to the result of the Variable name before format mask.\\  \\The user may use RTRIM(~) to remove trailing blanks before comparing the entire string because the data may contain blanks that are not visible at the end.\\  \\Please refer to following Derivation Expression processing

!BYPASS Capability
On IDIF Derivation expression, user may decode the Variable Name using the ~ character and return the word 'BYPASS' to bypass the Detail record entry that are with certain criteria

The 'BYPASS' criteria can be set up for Record Type = 'Qualify record', 'Detail record', and should not be used for Header and Trailer records

If the return value of any IDIF Record Number/Field Number = 'BYPASS', then this Detail record will be bypassed and will not be written to the Interface file

Example:
*To include only Departments start with 'P' on interface file:\\decode(rtrim(substr(~,1,1)),'P',~,'BYPASS')
*To include only Departments ends with 'C' on interface file:\\decode(substr(~,length(rtrim(~)),1),'C','BYPASS',~)
*To bypass Cost Centers that has '????' in second segments:\\decode(SUBSTR(~,5,4),'????','BYPASS',SUBSTR(~,5,4))
*To include Journal Entries with Account Numbers over 40000 in segment 5:\\decode(greatest('40000',substr(~,16,5)),'40000','BYPASS',substr(~,16,5))

!BYPASS-1-PPL, BYPASS-ALL-PPL, BYPASS-TO-PPH

When UPPHF is run with Interface Level = 'Pay Headers + Pay Lines', you may want to BYPASS the current pay line and continue to process the next pay line.

When a Pay Line (ppl) is being processed, all the associated Pay Line Details (ppld) are processed one at a time until all ppld are finished.

The following BYPASS capabilities are available at the Pay Line level:
;BYPASS:Bypass current ppld, will go to process next ppld\\  \\Usually BYPASS should be used for Qualify Records and is also used for other Record Types, this BYPASS also works in ppl
;BYPASS-1-PPL:Bypass current ppld, will go to process next ppld\\  \\When Interface Level = 'Pay Headers + Pay Lines', you should use 'BYPASS-1-PPL' instead of just 'BYPASS' for clarification
;BYPASS-ALL-PPL:Bypass all ppl and ppld from this point onward, will go to process Pay Amounts\\  \\The Pay Amounts will subtract the amounts that have been processed by ppld so far
;BYPASS-TO-PPL:Bypass all ppl, ppld, Pay Amounts from this point onward\\  \\Will go to process Pay Header Summary\\  \\Example:\\[UPPHF_01.JPG]\\  \\In Derivation Expression:\\decode(~,'14-OCT-2008','BYPASS','16-OCT-2008','GOTO#60#1','22-OCT-2008','BYPASS-1-PPL','24-OCT-2008','BYPASS-ALL-PPL',~)\\  \\This means DECODE the Pay Line Start Date, if the Pay Line Start Date:
#equals to '14-OCT-2008', then return the value of 'BYPASS'
#equals to '16-OCT-2008', then return the value of 'GOTO#60#1'- this will GOTO Rec# 60 Field # 1
#equals to '22-OCT-2008', then return the value of 'BYPASS-1-PPL'
#equals to '24-OCT-2008', then return the value of 'BYPASS-ALL-PPL'

!GOTO#nn#nnn
When processing IDIF records of the same Record Type (e.g. Detail Record), you may want to skip some Record # Field # based on certain criteria and resume processing of the same Record Type at a later Record# Field# onward.

The following GOTO capabilities are available for all Record Types in Derivation Expression:\\GOTO#nn#nnn - where the 1st nn is the Record #, the 2nd nnn is the Field #

Since the IDIF entries are processed in chronological order, GOTO#nn#nnn must be for a Record# Field# that is after the current Record# Field#

If an incorrect GOTO#nn#nnn is specified, or the #nn#nnn is NOT for the same Record Type, or if it is for a previous Rec# Field#, an exception message will be issued, the GOTO statement cannot be executed after skipping the records, you must verify the Interface File from this point onward

Multiple GOTO#nn#nnn can be used within the same Record Type

Please see the above example for BYPASS-1-PPL that contains GOTO#60#1 to go to Record# 60 Field# 1

If an Invalid GOTO is encountered in IDIF definition, the Trial mode parameter is set to 'Y' in order to prevent the Updating of the User Defined Fields from the Record Type '92-Update Record'.

For XML File Format, the GOTO#nn#nnn can be used to skip certain XML Tags and carry on the processing

For Fixed File Format, if the GOTO#nn#nnn is for the current Record#, it will GOTO the specified #nn#nnn, the current Record# information will be written

For Fixed File Format, if the GOTO#nn#nnn is for a different Record#, it will GOTO the specified #nn#nnn of the different Record#, the current Record# information will NOT be written

e.g. UEEF IDIF Record# 30 Field # 45, decode Plan_Code, if it equals to 'HL GROUP LIFE', GOTO#35#10\\This will skip the entire Record# 30 and carry on from Record# 35 Field#10 for the fixed file format.
[UPPHF_02.JPG]
 
!Multiple Fields Processing
[UPPHF_03.JPG]

On IDIF derivation expression, user can specify multiple variable names processing by indicating the lexicon value of the  X_INF_VARIABLE_NAME inside the bracket [ ], e.g. [320001]

Lexicon values available from IMLN for X_INF_VARIABLE_NAME are: 32nnnn, 35nnnn

This provides the full list of INF variables interchangeably for UPPHF, UEEF as long as the Database tables are being loaded according to the Interface Level parameter of the run

Please see example below: 

__Example: Record # 50, Field # 20 Requirement for Employee Row id or Unit id:__

If Pay Header Group User Defined Field (UDF) 'PROJECT HOURS BY PERSON' is 'Y', this means the employee is an 'ADMIN' employee, then if the Journal Entry is reporting for 'Hours', then use the Identities eid.id on the interface file field, otherwise, use the Unit dun.id on the field for all other situation

From above IDIF set up, you should specify the Variable Name using 'UDF (DGD)' and enter the UDF name in Constant Value field, then the value of UDF will be returned and represented as ~ in the derivation expression.

In derivation expression, enter:\\decode(~,'Y',decode([320803],'02',[320009],[350400]),[350400])\\where:
|[320803]|Journal Type (DGA), 01 - Financial Journal, 02 - Statistical Journal
|[320009]|Identity eid_id
|[350400]|Unit dun_id (DUN)
This derivation expression means:
*decode the value of ~ from UDF
**if the value = 'Y', then
***decode the value from [320803] Journal Type
****if Journal Type = '02' Statistical Journal, then 
*****return [320009] Identify eid.id
****otherwise
*****return [350400] Unit dun_id
**otherwise
***return [350400] Unit dun_id

__Example: Record # 50, Field # 10 Requirement: Work Date or Pay Period__

If Pay Header Group User Defined Field (UDF) 'PROJECT HOURS BY PERSON' is 'Y', this means the employee is an 'ADMIN' employee, then use the Pay Period on the interface file field, otherwise use the GL Effective date on the interface file field

From above IDIF set up, user should specify the Variable Name using 'UDF (DGD)' and enter the UDF name in Constant Value field, then the value of UDF will be returned and represented as ~ in the derivation expression.

In derivation expression, enter:\\decode(~,'Y',[320102],to_char(to_date([320756]),'DD/MM/YYYY'))\\where:
|[320102]|Pay Period
|[320756]|GL Eff Date (PJD)

This derivation expression means:
*decode the value of ~ from UDF
**if the value = 'Y', then
***return the value from [320102] Pay Period
**otherwise
***return the value from [320756] GL Effective date with the date format of 'DD/MM/YYYY'

!P2K Internal Functions

The user has ability to call some P2K internal functions in the derivation expression under the guidance of HL consultant.  The following example is for UPPHF Payroll History Interface, and is used to demonstrate Derivation Expression only.  In this example, the Element value of 'HOURS COMP TIME' will be returned for Variable Name 'Pay Header pph_id'.

%%information The IDIF screen layout is revised as above, the screen prints in this section are example of Derivation Expression only and therefore are not matched with revised layout above, please ignore the layout format.%%

[UPPHF_04.JPG]
 
The above example can also be achieved by setting up Variable Name = ‘Element pph Value’ with the Element Code specified in the Constant Value field.

[UPPHF_05.JPG] 

!P2K Internal Functions with Parameters

The user has ability to call some internal functions in the derivation expression under the guidance of a consultant and pass the following internal parameters in order to perform some internal calculation:

|#PPH_ID#|- must be capital letters, this #PPH_ID# will be replaced by the current Pay Header's pph.id
|#EEM_ID#|- must be capital letters, this #EEM_ID# will be replaced by the current Employment's eem.id
|#EID_ID#|- must be capital letters, this #EID_ID# will be replaced by the current Identity's eid.id

e.g. the Element PC value of 'HOURS O/T' will be retrieved first and is represented as ~ in derivation expression

The derivation expression will return the Element value of 'HOURS COMP TIME' for #PPH_ID# and add to value of ~ 

[UPPHF_06.JPG] 

User may perform some internal arithmetic calculation in the derivation expression to return some prorated amount.

((Value of a PC in 'HOURS OT' element / Value of 'HOURS OT' Element)* Benefit Element 'HOURS COMP TIME')

[UPPHF_07.JPG]  

!XML File format

[UPPHF_08.JPG] 

The system provides starter_IDIF_HL$PAY-HIST-XML.sql script to load in example of a xml format interface file.

You should use [Copy Definition] to copy into a different Interface Code and then enter their own company data.

Please refer to IDIF Fixed File Format for details of field description.

The Beginning and Ending positions are not needed for xml file format.

!!IDIF - Call User Calc
!Call User Calc Function

You can call User Calc function at each Record Number, each Field Number

You should set up Variable Name = 'User Calc', and specify the User Calc name in the Constant Value field

The Field Type must be defined with Char, Number or Date, the User Calc function on IMUC screen Return Value must match the values (Char, Number or Date) with the IMUC RET command to return the corresponding Char, Number or Date 

The data base tables available for User Calc are: 
at company level: DEN/DLN/DDP/DDD/DUN/DGR/DGD/DGV
at employee level: EID/EPS/EEM/EAS/EASD/PPRU/PPRC

!!IDIF - Update Record Set Up
During the UPPHF run, you have the ability to update certain User Defined Fields (UDF) to indicate that the Interface file has been generated and mark the records as being processed.  You may reference these UDFs in [IDIF] to prevent the same information from being processed again.

You can also update the [File Creation Number|FILE_CREATION_NUMBER] on an Update Record indicating that variable and the derivation expression to {{{~ + 1}}}

On the [IDIF] screen, Record Type '92-Update Record' should be defined at the end of the [IDIF] definition


The Variable Name should contain the UDF (xxx) that is to be updated or inserted,e.g. '320629 - UDF (PRN) (32)'

The Constant Value field should contain the name of the UDF, e.g UPPHF_CALPERS_PRN. If this UDF name does not exist on the [IMUF] screen, UPPHF will create the UDF with this name on [IMUF] screen for the Data Base Table to be updated.

The Derivation Expression field should contain the expression that is evaluated to the value to be updated for the UDF.

The following derivation expression features can be used to derive the value to be updated:
*Multiple fields processing
*DECODE
*BYPASS
*String manipulation
*Concatenation
*Function calls, etc.

When UPPHF is run in non-Trial mode, Record Type '92-Update Record' will be processed at the appropriate levels to check if the UDF should be updated for the associated Data Base tables.

From above example:
*Rec#500 Field#10 indicates to update 'UDF (PRN)', this will be processed at the end of each qualified pay run
*Rec#500 Field#20 indicates to update 'UDF (PPH)', this will be processed at the end of each qualified pay header
*Rec#500 Field#30 indicates to update 'UDF (PPL)', this will be processed at the end of each qualified pay line
*Rec#500 Field#40 indicates to update 'UDF (EEM)', this will be processed at the end of each qualified pay header
*Rec#500 Field#50 indicates to update 'UDF (EASD)', this will be processed at the end of each qualified pay line

If the UDF is for a variable name that can be varied at the Pay Line level, then the UDF will be updated at each Pay Line level, e.g. 'UDF (DDD)', each pay line may point to a different department, therefore the UDF may be updated at the Pay Line level for that department.

Using the Returned Value of the derivation expression, UPPHF finds if the UDF already exists:
*if the UDF exists and the new value is different than the existed UDF value, it will be updated
*if the UDF does not exist, it will be inserted

List of UDF supported in UPPHF from [X_INF_VARIABLE_NAME] are:
*320606 - UDF (EID) (32)
*320607 - UDF (EEM) (32)
*320608 - UDF (EPS) (32)
*320610 - UDF (EASD) (32)
*320621 - UDF (DED) (32)
*320623 - UDF (DDD) (32)
*320624 - UDF (DLN) (32)
*320626 - UDF (DUD) (32)
*320628 - UDF (DGD) (32)
*320629 - UDF (PRN) (32)
*320630 - UDF (PPH) (32)
*320631 - UDF (PPL) (32)

After UDFs are updated or inserted in UPPHF, the number of records updated for each Data Base table will be displayed on the UPPHF report.

%%information The number of UDFs updated represents the number of times the tables are being touched. These may not necessarily be the exact number of UDF for that table. e.g. UDF (EEM) may be touched two times if an employee has two pay headers to update the same EEM, but with a different value.%%

----
!!Processing Information
!Qualify Process
From the selection criteria, UPPHF selects pay runs according to user specified From/To Pay Period, Entity, and Payroll.

A pay run's Pay Period End date or Pay Issue date must be on the day of or prior to the user specified 'As of' date.

Pay runs with a Pay Run Stage of '70 - Closed' or '80 - Journalized' will be processed.

All pay headers of the qualified pay runs will be processed, pay headers may further be selected by Department, Org Level, Unit, Group, Person code etc.

As each pay header is processed, the associated database tables for this pay header will be loaded.
;:''e.g. Entity, Payroll, Unit, Group, Employment, Assignment of Pay Header, Department of Assignment, Position/Job of Assignment, Authorization Area of the applicable assignments, Organization Level of the department, Pay Period, Tax Jurisdiction, etc.''

The pay header is then further qualified by using the [IDIF] record type, 'Qualify Record'. If the 'Qualify Record' returns the value of 'BYPASS', then this pay header will be bypassed. 

After the pay header is qualified, then the UPPHF Interface Level parameter is checked.

!Pay Header Begin

After Pay Header is qualified, UPPHF will process IDIF Record Type ’16-Pay Header Begin’ to generate Pay Header related information for this Pay Header

Then the Interface Level parameter is checked for next set of processing.\\Lexicon X_INTERFACE_UPPHF values are:
|01 |Pay Headers
|02 | Pay Headers + Pay Lines
|10 |Journal Entries

!Interface Level 01 - Pay Headers
For the interface level of ' 01 - Pay Headers', the pay header and its associated pay amounts will be processed.

Each pay header's information will be loaded.
;:''e.g.the pay header assignment, assignment's department, cost centers, position, job, authorization, organization level of department, etc.''

If the [IDIF] numeric field specifies that an [element|PAY ELEMENTS] (pph value) is to be used, then the [Element code|ELEMENT_CODE] should be specified in the [IDIF] Constant Value field. UPPHF calls the Element function for this [element|PAY ELEMENTS] to obtain the element amount.

If the [IDIF] numeric field specifies to 'Accumulate' and/or to 'Calculate Total', then the amount will be accumulated or totaled.

If the [IDIF] field specifies a sort sequence, then the Variable Name value is also used for sorting purpose. The [IDIF] Record Type 'Detail Record' (or Rec#30 - 69) information for this pay header will then be saved in an internal PL/SQL table.

With all the pay header information, UPPHF searches from the internal PL/SQL table to group the same information together.

If the Interface File layout specifies any field that is to be reported at the employee level, e.g. Employee Name, Pay Number etc, then UPPHF will write the internal PL/SQL table to Execution Run Log table with Trace Level = '7' with the Sort Data in the context 2 field.

If the Interface File layout does not specify any field that is to be reported at the employee level, then the internal PL/SQL internal table will be used for all employees. At the end of UPPHF run, it will write the internal PL/SQL table to Execution Run Log table with Trace Level = '7' with the Sort Data in the context 2 field. Then the Execution Run Log with Trace Level '7' will be re-read and sorted by context 2 field to write to the interface file.

If the sort sequence is not used in [IDIF] record type 'Detail Record' (or Rec# 30-69), then UPPHF will not write to Execution Run Log, it will directly read from the PL/SQL table and write to interface file.

After UPPHF is run, you should verify from the interface directory the Interface File layout

!Interface Level 02 - Pay Headers + Pay Lines
For interface level '02 - Pay Headers + Pay Lines', all pay lines of this pay header will be processed.

Each pay line's information will be loaded.
;:''e.g. Pay line assignment, department, cost centers, position, job, authorization, organization level of department, etc. This may be different than the pay header's assignment, department, etc.''

As each pay line is processed, all of its associated pay line details will be processed. 

As each pay line detail is processed, the [pay component|PAY COMPONENTS] and amount of this pay line detail is retrieved.

With one [pay component|PAY COMPONENTS] and amount from one pay line detail, UPPHF will process [IDIF] record type 'Detail Record' (or Record # 30 - 69 if the record type does not exist).

The [IDIF] record type 'Detail Record' (or Record# 30 - 69) Variable Names can reference to the loaded pay line detail or pay header information. e.g. Pay Period, Department, Cost Centers,etc.

If the [IDIF] numeric field specifies to retrieve a [pay component|PAY COMPONENTS] value, then the pay line detail amount will be used.

If the [IDIF] numeric field specifies to use an [element|PAY ELEMENTS], then the [Element code|ELEMENT_CODE] is specified in the constant value and UPPHF checks if the Pay Line Detail [pay component|PAY COMPONENTS] is in this [element|PAY ELEMENTS] to include the pay line detail amount or not.

If the [IDIF] numeric field specifies to 'Accumulate' and/or to 'Calculate Total', then this Pay Line Detail amount will be accumulated or totaled.

If the [IDIF] field specifies a sort sequence, then the variable name result is also used for sorting purpose.

Then the [IDIF] record type 'Detail Record' (or Rec#30 - 69) information for this pay line detail will be saved in an internal PL/SQL table.

As the next pay line detail record is processed, UPPHF will search from the internal PL/SQL table to group the same information together.

After all pay line details and pay lines are processed for one pay header, then the pay amounts of this pay header will be processed.

As each pay amount is processed, it will subtract the amount that has been processed by the pay line details and then process the remaining amount with [IDIF] the record type 'Detail Record' (or Record # 30-69).

With the pay amount information, UPPHF searches from the internal PL/SQL table to group the same information together.

After all pay amounts are processed for one pay header, UPPHF will process the internal PL/SQL table and write to the interface file.

If the Interface File layout specifies any field that is to be reported at the employee level (e.g. Employee Name, Pay Number, etc.) then UPPHF will write the internal PL/SQL table to Execution Run Log table with Trace Level = '7' with the Sort Data in the context 2 field.

If the Interface File layout does not specify the field that is to be reported at the employee level, then the internal PL/SQL internal table will be used for all employees. At the end of UPPHF run, it will write the internal PL/SQL table to Execution Run Log table with Trace Level = '7' with the Sort Data in the context 2 field.

Then the execution run log with Trace Level '7' will be re-read and sorted by the context 2 field to write to the interface file.

If the sort sequence is not used in the [IDIF] record type 'Detail Record' (or Rec# 30-69), then UPPHF will not write to execution run log, it will directly read from PL/SQL table and write to interface file.

After UPPHF is run, you should verify the Interface File layout from the interface directory.

!Interface Level 10 - Journal Entries
For the Interface Level '10 - Journal Entries', UPPHF will first process the [IDIF] record type 'Detail Record' for the pay header and then process [IDIF] record type 'Detail Level 1' for all the pay header's related journal entries.

||Record Type||Interface File Record
|Detail Record|This is an optional field and may generate a Header record for the pay header.
|Detail Level 1|This is a mandatory field and will generate one entry per Journal Detail record. 

In this way you may generate interface records in following sequence:
;:''....
;:''Pay header employee related info
;:''Journal Detail
;:''Journal Detail
;:''Journal Details
;:''....
;:''Pay header employee related info
;:''Journal Detail
;:''Journal Detail
;:''Journal Detail
;:''Journal Detail
;:.''....etc''

As each journal detail is processed, UPPHF saves the [IDIF] information using the internal PL/ SQL table in the same manner as the '01 - Pay Headers' processing. After all journal entries are processed for one pay header, UPPHF will then process the internal PL/SQL table and write to the interface file.

!Pay Header Summary
After the interface level is processed for these levels.
Lexicon X_INTERFACE_UPPHF values are:
|01|Pay Headers
|02|Pay Headers + Pay Lines
|10|Journal Entries

Before writing to the Interface File, UPPHF will process [IDIF] Record Type '17-Pay Header Summary' to generate pay header related summary information for this pay header.

!Update Record
When UPPHF is run in non-trial mode, Record Type '92-Update Record' will be processed at the appropriate levels to check if the User Defined Fields (UDF) are to be updated for the associated Data Base tables.

!!Report Parameter
----
!Report Parameters & Filters
||Report Parameters||
|From Pay Period/To Pay Period |Optional ,Date, LOV Available\\You may select the From and To Pay period for the Payroll code specified.
|From / To Pay Issue Date|Optional ,Date, LOV Available\\You may select a From and To Pay Issue date for the pay headers.\\If the From-To Pay Issue dates are entered, each pay header's Pay Issue date must be within this date range in order to be processed.
|As Of|Mandatory, Date, LOV Available\\ This date is used to retrieve pay runs that are with the Pay Period end date or Pay Issue Date that is on or prior to this As Of date.
|Trial Run|Optional, [Yes or No|X_YES_NO] lexicon available\\You may indicate if the UDFs are to be updated for the UPPHF run.\\To run in non-Trial mode (Update mode), you should define IDIF Record Type '92-Update Record' to update UDFs.
|Interface Format Code|Optional, Text\\Select the Interface Format code (IDIF) that is with the Interface Type of '32-Pay History Interface'
|Interface Level|Mandatory,[Interface Level|X_INTERFACE_LEVEL] lexicon available\\Specify the level for the Interface file to be produced.
|Directory Name|Optional, Text\\Enter a valid directory name for interface file.
|File Name |Optional, Text\\Enter the file name of the interface file.  If not provided, the file name will be taken from the IDIF definition.\\If you use the tokens ''MEX'' or ''DATE'' or ''TIME'' these will be replaced as noted in [P2K_PU.FILE_NAME].\\For a fixed format file, you may specify a file with extension .txt.\\For a comma delimited format file, you may specify a file with extension .csv\\For the XML file, you may specify a file with extension .XML
|Write Append to File|Mandatory,[Write Append|X_WRITE_APPEND] lexicon available\\Provides the option to write a file or append to an existing one.
|Exception Level|Optional, [Exception Level|X_TRACE_LEVEL] lexicon available\\This field defines the exception level (report messages) required.\\If the exception level is '0', only exception messages will be printed.\\If the exception level is '1', one line will be printed per pay header with performance time.\\If the exception level is '2', one line will be printed per pay header with performance time and one line per Detail Level 1 record.\\If the exception level is '8' or '9', full utility trace is available only if the user selects by Person code. Otherwise UPPHF will internally reset to exception level '1' due to the volume of trace messages.
|User Comments |Optional, Text \\This field holds the user-supplied comment which will appear in the header of all pages of the report.  This is useful during testing phases to identify similar reports from each other.

||Report Filters||
|Entity |This is a mandatory field. You must enter one 'Entity Code' to be processed.
|Person Code| You may enter a list of 'Person Code' filters.
|Department| This is an optional field. Multiple 'Department Code' filters are allowed to be entered.
|Authorization| This is an optional field. You may enter either one or multiple 'Authorization area' filters. The authorization area is retrieved from either the pay header or pay line's assignment if authorization exists at assignment level. Otherwise it is retrieved from the position of the assignment if it exists, otherwise retrieve from the department of the assignment.
|Org Level Type| This is an optional field. You may enter either one or multiple 'Org Level Type' filters. You may enter 'Org Type 02', 'Org Type 03', etc to process applicable level types or you may enter 'Org Type 02' to process only this level.
|Org Level| This is an optional field. You may enter either one or multiple 'Org Level' filters. If multiple Org Level Types are entered, then you may process across multiple levels.
|Unit| This is an optional field. Multiple 'Unit Code' filters are allowed to be entered.
|Group |This is an optional field. Multiple 'Group Code' filters are allowed to be entered.
|Payroll| This is a mandatory field. You must enter one 'Payroll Code' to be processed. The pay headers must belong to this payroll code in order to be processed.
|Cost Center| This is an optional field. Multiple 'Cost Center Code' filters are allowed to be entered. The cost centers are retrieved from the pay lines and therefore are not applicable at the Pay Header level.
|Pay Run Number| This is an optional field. You may select a list of Pay Run numbers for the Payroll code specified.

----
![Notes|Edit:Internal.UPPHF] 	
[{InsertPage page='Internal.UPPHF' default='Click to create a new notes page'}]