/
Creating Custom Forms

Creating Custom Forms

 

Custom forms can be imported into USPS-R to be used for printing PDF forms like direct deposits and salary notices. To create a custom form, users would create their own Word template and upload it to the Report Manager. 

Default Forms

Default forms are included with the application. A custom form can be created using merge fields in a Word Template document. 

Templates for USPS-R transactions:

  • Default Direct Deposit Form -

  • Default Check Form -

  • Salary Notices

Several template forms can be found in the Public Shared Reports Library>Custom Form Templates section.  Click here for a list of available downloadable forms.

Create Forms in Report Manager

This is done from the Reports>Report Manager view, using the Create Form option:

  • Report Name - Will be what users see when they select the form to use for printing

  • Description - Will be visible in the Reports Manager grid (optional)

  • Tag - A user defined way to categorize reports. Can be utilized to filter records within the grid (optional)

  • Entity Type - Select the Entity type that corresponds with the Form that is being added 

    • Payee - CheckPaymentDetail

    • Payroll Direct Deposits - PaymentDetailPayrollDirectDeposit

    • Payroll Checks - PaymentDetailPayrollCheck

    • Salary Notices - NewContract

  • Filename - Click Select Form and select the custom form file from your computer

Click on  to Save the Form or Cancel to exit. Once saved, the custom form will show in the Reports Manager grid. 

If non-Admin user needs to use this form for printing, use the share icon to grant access to other USPS Roles. 

Use Custom Forms When Printing PDF Forms

When printing direct deposits and salary Notices, users will have an option to select the form to be used from a drop down list. The drop down option will appear after selecting "PDF."

Example of Printing Direct Deposits with a Custom Form:

Example of Printing Salary Notices with a Custom Form:

How to Customize a Form

When editing the template forms in Word, "fields" are used with the USPS property names. For official documentation on how to use fields in Microsoft Word, please refer to the Microsoft Support/Documentation. 

Word Formatting Tips

The template form is set up in a table format to keep everything in its proper spot. Before you begin customizing your forms, you can display borders and/or markups (hidden formatting) on the Word form in order to see the placement of the fields better. 

  •  

    • To display markups:

      • Go to File>Options>Display, and checkmark 'Show all formatting marks.' Click OK.  This will display the 'hidden formatting' markups on the form.  

        • NOTE: Markups will not appear on the printed or emailed form.  If you wish to turn off markups in Word, uncheck the 'Show all formatting marks' under File>Options>Display.

    • To display borders: 

      • Go to Home>Select>Select All (Ctrl+A) to select the entire form.

      • Next, go to Home and click on the dropdown to the right of the borders option

        and select 'All Borders.'

        .  This will display borders on the form.

        • NOTE: You must remove the borders before saving changes to the Word document or else the borders will appear on the printed/emailed form.

Adding a Field

  • Insert the merge field(s).  

    • Place your cursor where you'd like the new field to be placed.

    • Go to Insert>Quick Parts>Field.  When the pop-up box appears, select MergeField.  In the Field Name, enter the appropriate field name. 

      •  i.e.  ${d.amount}

    • Click OK.  

    • Save the changes made to the form.

 

Editing a Field

  • Right-click on the field and select Edit Field.

  • Edit Field name value.

  • Click OK.

  • Save the changes made to the form.

 

  • If creating one salary notice, <<[/#list]>> can be at the bottom of the document as the last field.

  • If creating multiple salary notices at once and the generated notices are not advancing to the next page properly, ensure <<[/#list]>> is at the very top of the next page.

  • To insert a logo (image), go to Insert>pictures.  Ensure the logo is inserted after the first field of the form, «[#list modelObjects! as row]», and is positioned as ‘in line with text’ so Word recognizes it as part of the document.

Adding the Memo line to Custom Forms

To add the Memo line on Custom Forms, use ${(o.memo)!}

Crosswalk of Check/Direct Deposit Notification XML

The property names are case-sensitive and should be entered as listed below. For a printable version, please click .

Description

Field Name

Merge Field Name

 

Description

Field Name

Merge Field Name

 

Employer Number

employeeNumber

${(o.employeeNumber!)}

 

Type (Check or DIRDEP)

type

${(dd.type)!}

 

Organization Name

organizationName

${(o.organizationName)!}

 

Organization IRN

organizationIRN

${(o.organizationIrn)!}

 

Organization Street 1

street1

${(o.organizationAddress.street1)!}

 

Organization Street 2

street2

[#if o.organizationAddress.street2?has_content]
${(o.organizationAddress.street2)!}
[/#if]

 

Organization City

city

${(o.organizationAddress.city)!}

 

Organization State

state

[#if (o.organizationAddress.state!)?has_content]

[/#if]

${( o.organizationAddress.state)!}

 

Organization Zip Code

postalCode

${(o.organizationAddress.postalCode)!}

 

Foreign Address

foreignAddress

${(o.organizationAddress.foreignAddress)!}

 

Organization Phone Number

phoneNumber

${(o.organizationPhoneNumber)!}

 

Employee Last Name

lastName

${(o.name.lastName)!}

 

Employee First Name

firstName

${(o.name.firstName)!}

 

Employee Middle Name

middleName

${(o.name.middleName)!}

 

Employee Report Full Name

reportName

${(o.name.reportName)!}

 

Employee Address

street1

${(o.address.street1)!}

 

 

street2

${(o.address.street2)!}

 

 

city

${(o.address.city)!}

 

Employee State

state

[#if (o.address.state!)?has_content]

[/#if]

${(o.address.state)!}

 

Employee Zip Code

postalCode

${(o.address.postalCode)!}

 

Foreign Address

foreignAddress

${(o.address.foreignAddress)!}

 

Employee SSN

emplooyeeSsn

${(o.employeeSsn!)}

 

Employee Number

employeeNumber

${(o.employeeNumber!)}

 

Hire Date

hireDate

${(o.hireDate!)}

 

Odjfs Hire Date

odjfsHireDate

${(o.odjfsHireDate!)}

 

Email

email

${(o.email!)}

 

Email Direct Deposit

emailDirectDeposit

${(o.emailDirectDeposit)}

 

User Text 1

userText1

 

 

User Text 2

userText2

 

 

User Code 1

userCode1

 

 

User Code 2

userCode2

 

 

User Code 3

userCode3

 

 

User Code 4

userCode4

 

 

User Money 1

userMoney1

 

 

User Money 2

userMoney2

 

 

User Money 3

userMoney3

 

 

User Money 4

userMoney4

 

 

Net Pay

net

${(o.net?string(",##0.00"))!}

 

Gross

gross

${o.gross?string(",##0.00")!}

 

Amount

amount

${pa.payAmount?string(",##0.00")}

 

Adjusted Gross

adjustedGross

${o.adjustedGross?string(",##0.00")!}

 

Adjusted YTD

adjustedYTD

${o.adjustedYTD?string(",##0.00")!}

 

Gross Y-T-D

grossYTD

${o.grossYTD?string(",##0.00")!}

 

Pay Date

payDate

${o.payDate?datetime?string("MM/dd/yyyy")}

 

Period Start

periodStart

${o.periodStart?datetime?string("MM/dd/yyyy")}

 

Period End

periodEnd

${o.periodEnd?datetime?string("MM/dd/yyyy")}

 

Written1

written1

 

 

Written 2

written2

 

 

Employee Payroll Items and Employee Error Adjustments

(Total Ded)

totalDeductions

${(o.totalDeductions?string(",##0.00"))!}

 

Total Employer Payroll Items and Employer Error adjustments

totalEmployerDeductions

${(o.totalEmployerDeductions?string(",##0.00"))!}

 

Void Message

voidMessage

${(o.voidMessage)!}

 

Personal Days Adjustment

personalDaysAdj

${(o.personalDaysAdj?string("0.000"))!}

 

Personal Days Balance

personalDaysBal

${(o.personalDaysBal?string("0.000"))!}

 

Sick Days Adjustment

sickDaysAdj

${(o.sickDaysAdj?string("0.000"))!}

 

Sick Days Balance

sickDaysBal

${(o.sickDaysBal?string("0.000"))!}

 

Vacation Days Adjustment

vacationDaysAdj

${(o.vacationDaysAdj?string("0.000"))!}

 

Vacation Days Balance

vacationDaysAdj

${(o.vacationDaysBal?string("0.000"))!}

 

Sers Hours

sersHours

${o.sersHours!}

 

Sers Days

sersDays

${o.sersDays!}

 

Sers Days YTD

sersDaysYTD

${o.sersDaysYTD!}

 

Sers FTD Hours

sersFTDHours

${o.sersFTDHours!}

 

Sers Hours YTD

sersHoursYTD

${o.sersHoursYTD!}

 

Sers Gross

sersGross

 

 

Sers Gross FTD

sersGrossFTD

 

 

Strs Hours

strsHours

${o.strsHours!}

 

Strs Days

strsDays

${o.strsDays!}

 

Strs Days YTD

strsDaysYTD

${o.strsDaysYTD!}

 

Strs Gross

strsGross

 

 

Strs FTD Hours

strsFTDHours

${o.strsFTDHours!}

 

Strs Gross FTD

strsGrossFTD

 

 

Hourly Employee Only

  • Total Hourly Units great 0

  • Total Hourly Units

  • Total Hourly Units Over Forty Per Week

 

 

totalHourlyUnits gt 0

  • totalHourlyUnits

  • totalHourlyUnitsOverFortyPerWeek

 

[#if o.totalHourlyUnits gt 0]

  • ${o.totalHourlyUnits?string(",##0.00")!}

  • ${o.totalHourlyUnitsOverFortyPerWeek?string(",##0.00")!}

[/#if]

Default form contains condition that only shows this for hourly employees

Payment Number

DEP #

  • ${(o.number?string("#0"))!}

 

 

Position Number/Job Number

<pp> repeating

pp.positionNumber

  • payGroup

  • building

  • buildingDepartment

  • department

<pp> repeating

@before-row[#list o.positionPaysToPrint as pp]

  • ${pp.positionNumber!}

    • ${pp.payGroup!}

    • ${pp.building!}

    • ${pp.buildingDepartment!}

    • ${pp.department!}

@after-row[/#list]

 

Position Amount

< > repeating

  • pa.positionDescription

 

  • pa.description

  • pa.units

  • pa.rate

  • pa.payAmount

  • pa.payType

  • pa.payTypeCode

< > repeating

@before-row[#list o.payAmountsToPrint as pa]

  • ${pa.position.Description!}

or

  • ${pa.description!}

  • ${(pa.units?string("#0.000"))!}

  • ${(pa.rate?string(",##0.000"))!}

  • ${pa.payAmount?string(",##0.00")}

  • ${pa.payType!}

  • ${pa.payTypeCode!}

pa.positionDescirption

  • uses Position Description from Position for all entries, ignores Future/Current Description

pa.description

  • uses Compensation Label for REG pay types and descriptions that are entered in Future/Current

Pay Account

< > repeating

paymentDetailPayAccount

amountCharged

< > repeating

 

 

 

Payment Detail Payroll Item Paid

 

Payroll Item Description- even

 

 

 

 

 

 

 

Payroll Item Description -odd

 

 

 

 

 

< > repeating

< >

 

  • code

  • description

  • amount (with comma)

  • totalYTD

<

< >

 

 

  • code

  • description

  • amount (with comma)

  • totalYTD

<

 

 

 

type

employerAmount

additionalWithholding

errorAdjustment

employerErrorAdjustment

maritalStatus

numberOfExemptions

useNewW4>true</useNewW4

w4FilingStatus>SingleOrMarriedFillingSeparately</w4FillingStatus

w4TwoLikeJobs>false</w4TwoLikeJobs

w4DependentAmount>0.00</w4DependentAmount

 

w4OtherIncome>0.00</w4OtherIncome

w4DeductionAmount>0.00</w4DeductionAmount

stateExemptions

processingOrder

 

 

@before-row[#list o.evenPayrollItems as epi]

  • ${epi.itemCode!}

  • ${epi.itemDescription!}

  • ${(epi.itemAmount?string(",##0.00"))!}

  • ${(epi.totalYTD?string(",##0.00"))!}

@after-row[/#list]

@before-row[#list o.oddPayrollItems as opi]

  • $opi.itemCode!}

  • ${opi.itemDescription!}

  • ${(opi.itemAmount?string(",##0.00"))!}

  • ${(opi.totalYTD?string(",##0.00"))!}

@after-row[/#list]

 

 

 

 

 

 

 

${o.getFederalMaritalStatus()!}

${o.getFederalExemptions()!}

${o.getFederalUseNewW4()!}

${o.getFederalFilingStatus()!}

 

${o.getFederalTwoLikeJobs()!}

${o.getFederalAnnualDependentAmount()!}

 

${o.getFederalAnnualDeductionAmount()!}

${o.getStateExemptions()!}

 

 

 

Payment Detail Deposit Distribution

  • Checking or DIRDEP

  • Code

  • Bank Name

  • Checking or Savings (Code (XXX))

  • Amount

  • Account Number

  • Routing Number

 

<dd> repeating

  • type

  • code

  • destinationName

  • description (000) (payroll item code)

  • amount

  • accountNumber

  • routingNumber

</dd> repeating

 

@before-row[#list o.depositDistributions as dd]

  • ${(dd.type)!}

  • ${(dd.code)!}

  • ${(dd.destinationName)!}

  • ${(dd.description)!}

  • ${dd.amount?string(",##0.00")}

  • ${(dd.accountNumber)!}

  • ${(dd.routingNumber)!}

@after-row[/#list]

 

Payment Detail Deposit Distribution

  • Type

  • Description

  • Amount

< > repeating

  • type

  • description

  • amount

< >

@before-row[#list o.distributionAmounts as dd]

  • ${(dd.type)!}

  • ${(dd.description)!}

  • ${dd.amount?string(",##0.00")}

@after-row[/#list]

 

Memo

memo

${(o.memo)!}

 

Top of page

Bottom of page

 

if statement for next page

[#list modelObjects! as o]

[#if o?has_next]

[/#list]

 

image-20250325-164737.png
image-20250325-164805.png
image-20250325-164853.png
image-20250325-164934.png

Available Salary Notice Fields

Description

Field Name

Merge Field Name

 

Description

Field Name

Merge Field Name

 

Employee Number

employeeNumber

${(row.employeeNumber)!}

 

First Name

firstName

${(row.firstName)!}

 

Middle Name

middleName

${(row.middleName)!}

 

Last Name

lastName

${(row.lastName)!}

 

Street 1

street1

${(row.street1)!}

 

Street 2

street2

${(row.street2)!}

 

City

city

${(row.city)!}

 

State

state

${(row.state)!}

 

Zip

zip

${(row.zipCode)!}

 

Position Number

positionNumber

${(row.positionNumber)!}

 

Position Description

positionDescription

${(row.positionDescription)!}

 

Compensation Label

compensationLabel

${(row.compensationLabel)!}

 

Contract Amount

contractAmount

${(row.contractAmount?string(",##0.00"))!}

 

Contract Work Days

contractWorkDays

${(row.contractWorkDays)!}

 

Number Of Pays

numberOfPays

${(row.numberOfPays)!}

 

Compensation Start Date

compensationStartDate

${(row.compensationStartDate)!}

 

Hours In Day

hoursInDay

${(row.hoursInDay)!}

 

Pay Plan

payPlan

${(row.payPlan)!}

 

Pay Per Period

payPerPeriod

${(row.payPerPeriod?string(",##0.00"))!}

 

Appointment Type

appointmentType

${(row.appointmentType)!}

 

School Year

schoolYear

${(row.schoolYear)!}

 

Statement Date

statementDate

${(row.statementDate)!}

 

District Name

districtName

${(row.districtName)!}

 

District Street

districtStreet

${(row.districtStreet)!}

 

District City

districtCity

${(row.districtCity)!}

 

District State

districtState

${(row.districtState)!}

 

District Zip

districtZip

${(row.districtZip)!}

 

Include District Info On Notice

includeDistrictInfoOnNotice

${(row.includeDistrictInfoOnNotice)!}

 

Name For Notice

nameForNotice

${(row.nameForNotice)!}

 

Salary Scheduled Id

salaryScheduleId

${(row.salaryScheduleId)!}

 

Salary Schedule Column

salaryScheduleColumn

${(row.salaryScheduleColumn)!}

 

Salary Schedule Step

salaryScheduleStep

${(row.salaryScheduleStep)!}

 

Rate

rate

${(row.rate?string(",##0.00#"))!}

${(row.rate?string(",##0.00"))!}

3-digit rounding

2-digit rounding

Rate Type

rateType

${(row.rateType)!}

 

District Years

districtExperience

${(row.districtExperience)!}

 

Building Years

buildingExperience

${(row.buildingExperience)!}

 

Accred Dist Years

accredDistrictExperience

${(row.accredDistrictExperience)!}

 

Military Years

militaryExperience

${(row.militaryExperience)!}

 

Trade Years

tradeExperience

${(row.tradeExperience)!}

 

Retire System Years

retireSystemExperience

${(row.retireSystemExperience)!}

 

Ohio Public Years

ohioPublicExperience

${(row.ohioPublicExperience)!}

 

Ohio Private Years

ohioPrivateExperience

 ${(row.ohioPrivateExperience)!}

 

Non Ohio Public Years

nonOhioPublicExperience

${(row.nonOhioPublicExperience)!}

 

Non Ohio Private Years

nonOhioPrivateExperience

${(row.nonOhioPrivateExperience)!}

 

Purchased Years

purchasedExperience

${(row.purchasedExperience)!}

 

Authorized Years

authorizedExperience

${(row.authorizedExperience)!}

 

Total Years

totalExperience

${(row.totalExperience)!}

 

Principal Years

principalExperience

${(row.principalExperience)!}

 

Degree Type

degreeType

${(row.degreeType)!}

 

Degree Type Desc

degreeTypeDescription

${(row.degreeTypeDescription)!}

 

Creating ‘Custom Forms’ video

For more information on creating custom forms, click here to be taken to the FWF: Custom Forms recording.

 

 

 

Related content