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 -

  • Updated Direct Deposit Form - 07.23.26

  • Default Check Form -

  • Updated Check Form - 07.23.26

  • Salary Notice Form - Default Form

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 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 Full Name + Suffix First Middle Last Suffix ${(o.name.w2Name)!} 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)!}

 

Employee SSN

employeSsn

${(row.employeeSsn)!}

 

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.