eCPR payroll table: is the hourly wage gross or net, and what goes in deductions?

DIR's answer is the pre-tax hourly wage, with a fringe benefit counted in it only when you pay that benefit straight to the worker. DIR describes the payroll table in three places: the payroll table section of its eCPR FAQ, its Upload eCPR guide for the manual form, and its eCPR XML guidelines for uploads. This page says which source each rule comes from and which path it covers.

Last reviewed against the sources it cites

The short answer

Enter the pre-tax hourly wage. DIR's eCPR FAQ says to reflect a fringe benefit in that wage only if you pay it directly to the worker, but the form example in DIR's Upload eCPR guide shows directly paid fringe in the fringe plan columns, and DIR does not say which controls. Fringe paid into a fund goes in the fringe plan boxes as hourly amounts. DIR's XML guidelines and its manual form treat deductions such as federal tax and FICA as total dollars for the pay period, not hourly amounts, although the FAQ says hourly. For a deduction box with nothing withheld, the FAQ says to put 0, and it says to use Other plus a note for a deduction without a box.

  • DIR answers the gross or net question with the pre-tax hourly wage, and a fringe benefit belongs in that wage only if you pay it directly to the worker, per DIR's eCPR FAQ. The current form example in DIR's Upload eCPR guide shows a directly paid $2.00 in the Training column beside a $50.00 rate, and DIR does not say which source controls.
  • Deductions such as FICA are total dollars for the pay period, while fringe benefits such as pension are hourly amounts, per step 12 of DIR's eCPR XML guidelines, version 2.0. DIR's Upload eCPR guide heads the manual form's Deductions table as total lump sum (non-hourly amounts). DIR's FAQ says to report deductions by the hour, while the March 2026 XML guidelines and the manual form say lump sum, and DIR does not say which controls. If you are unsure, ask DIR at publicworks@dir.ca.gov, the eCPR inbox its FAQ names.
  • For a deduction box with nothing withheld, DIR's eCPR FAQ calls the field required and says to put 0. In an XML upload every field under an employee is mandatory except notes, per step 9 of DIR's eCPR XML guidelines, version 2.0. A deduction with no box of its own, such as Medicare, goes in the Other box with an explanation in the notes section, per the same FAQ.
  • An XML upload has two gross entries, this project and all work, so 32 hours on your project plus 8 hours elsewhere at $30 an hour is $960 and $1,200, per the CPR XML schema, version 1.3. In the manual form, DIR's Upload eCPR guide shows one gross field to enter, Gross wages for all projects, and shows Net Wages without listing it as a field to enter.
  • In an XML upload every field under an employee is mandatory except notes, per step 9 of DIR's eCPR XML guidelines, version 2.0, the newest DIR XML guidelines we found. Step 10 says notes can be left blank.

The short version

Enter the pre-tax hourly wage, the rate before taxes come out. DIR's eCPR FAQ says that if you pay a fringe benefit directly to the worker, you can put 0 in the matching box and reflect the direct pay in the hourly base rate. It says that if you pay a fringe benefit into a fund or to a committee, you leave it out of the rate and report it in the contribution section.

DIR's current form example differs for directly paid fringe. In the Upload eCPR guide, with Paid Directly to Worker checked, a $2.00 amount sits in the Training column beside a $50.00 rate, and the form shows a total rate of $52.00. DIR does not say which source controls. Check the totals the form shows against the paystub before you save.

Fringe plan amounts are hourly amounts. Deductions such as federal tax, FICA, state tax and SDI are total dollars for the pay period, not hourly amounts. Step 12 of DIR's eCPR XML guidelines, version 2.0 says so, and the manual form in DIR's Upload eCPR guide heads its Deductions table total lump sum (non-hourly amounts). DIR's FAQ says to report deductions, contributions and payments by the hour, and DIR does not say which source controls. If you are unsure, ask DIR at publicworks@dir.ca.gov, the eCPR inbox its FAQ names. The section on deductions below sets out the conflict.

A deduction box with nothing withheld gets a 0. DIR's FAQ calls that field required and says you must put 0. In an XML upload, every field under an employee is mandatory except notes, per step 9 of the XML guidelines. Anything without a box goes in Other, with a line in the notes field saying what it is. The manual form and the XML upload are laid out differently, so each section below says which one it covers.

The payroll table, box by box

DIR shows this table two ways. The manual form is pictured in the Upload eCPR guide, and the form labels below come from its pages 16 and 17. The XML upload is described by two DIR documents. One is DIR's published CPR XML schema, which is version 1.3 in its own header and a file last modified in January 2016, and the element names come from it. The other is the eCPR XML guidelines, version 2.0, dated March 2026, which are the newest DIR XML guidelines we found. DIR's Certified Payroll Reporting page still names the schema as V1.3 and links XML guidelines that are version 1.10, dated January 2016. DIR's sample file uses the same namespace and the same element names. Each row names its sources and says which path it covers.

In an XML upload, every field under an employee is required except notes, per step 9 of the guidelines. That includes the total element, and DIR's sample file includes it.

Manual form boxXML elementWhat goes in
Rates: ST hourly rate, OT hourly rate, DT hourly ratehrlyPayRateStraightTime, hrlyPayRateOvertime, hrlyPayRateDoubletimeThe pre-tax rate per hour, in U.S. dollars. DIR's FAQ says to reflect fringe you pay directly to the worker in this rate and to leave out fringe you pay into a fund. DIR's current form example shows directly paid fringe in the fringe plan columns instead, and DIR does not say which controls. See the fringe benefit section below. For overtime rules, see overtime, shift and holiday pay. Sources: the FAQ for the fringe rule, the Upload eCPR guide page 16 for the form labels and example, and the schema for the dollar unit.
Fringe Benefit Plan: H/W, Pension, Vac/Hol, Training, OtherhealthWelfare, pension, vacationHoliday, trainingHourly amounts. Step 12 of the XML guidelines says to enter hourly amounts for fringe benefits such as pension. The FAQ says fringe paid into a fund or to a committee goes in the contribution section. On the form, these columns sit beside the hourly rates. In DIR's example, with Paid Directly to Worker checked, $2.00 under Training and a $50.00 straight-time rate show a total straight-time rate of $52.00. Sources: XML guidelines step 12, Upload eCPR guide page 16, and the FAQ.
Deductions: Fed tax, FICA (soc sec), State tax, SDIfedTax, FICA, stateTax, SDITotal dollars for the pay period, not hourly amounts. The XML guidelines give $121.22 for FICA as the example, meaning $121.22 paid to FICA for all hours worked in the pay period. The form's Deductions table is headed total lump sum (non-hourly amounts). Put a 0 where nothing was withheld, per DIR's FAQ. Sources: XML guidelines step 12, Upload eCPR guide page 17, and the FAQ for the 0.
Deductions: Fund/admin, Savings, DuesfundAdmin, savings, duesTotal dollars for the pay period. The manual form puts these three columns in the lump-sum Deductions table, not in the Fringe Benefit Plan section. The XML guidelines do not sort these three elements. Their names match the form's columns, so reading them as lump sums is our reading, not DIR's. Source: Upload eCPR guide page 17.
Other (one column in the Deductions table and one in the Fringe Benefit Plan section)otherAny deduction or payment with no box. In the Deductions table, DIR's form says to enter the amount in Other and give details in Additional Information. The FAQ's example is Medicare, explained in the notes, and it gives the same answer for a fringe benefit that fits no column. The XML guidelines do not say whether the other element is hourly or a lump sum, so say what you entered in the notes. Sources: Upload eCPR guide page 17 and the FAQ.
Total DeductionstotalOn the manual form, the form adds up the Deductions table for you. In an XML upload you enter total yourself, and it is required because every field under an employee is mandatory except notes. The XML guidelines do not say how it is calculated or whether hourly fringe amounts count toward it. Matching the form by summing your lump-sum entries is our reading, not DIR's. Sources: Upload eCPR guide page 17 and XML guidelines step 9.
Travel & subsistence payments for this projecttravelSubsOn the manual form, this is its own dollar field below the hours worked, and DIR's example is $100.00. The schema has a travelSubs element in the deductions group, and the XML guidelines do not say whether to enter it as an hourly or a total amount. Say what you entered in the notes. Sources: Upload eCPR guide pages 16 and 17 and the schema.
Employee notes (Additional Information)notesFree text about this worker's payroll, including the explanations the FAQ asks for, such as why a box holds 0 or what an Other amount is. In an XML upload, step 10 of the guidelines says notes is not mandatory and can be left blank, and the schema limits it to 256 characters. The schema sets no minimum number of occurrences for notes, so our reading is to include the element and leave it empty rather than leave it out. Sources: XML guidelines step 10, the schema, and the FAQ.
Check Summary: Gross wages for all projectsthisProject and allWork, under grossAmountEarnedOn the manual form, DIR's guide shows one gross field to enter, Gross wages for all projects. In an XML upload there are two dollar figures. This project is pay for the hours on this project. All work adds the worker's other jobs that week. With no other jobs, the two are equal. Sources: Upload eCPR guide page 17 and the schema.
Check Summary: Net WagesnetWagePaidWeekOn the manual form, DIR's guide shows Net Wages beside the gross and the total deductions but does not list it as a field to enter. In its example, $1,000.00 gross less $70.00 total deductions shows $930.00. DIR does not say whether the form calculates it. If the form asks you for it, the FAQ answer on Net Wages Paid for Week applies. In an XML upload, netWagePaidWeek is required and holds the dollar amount paid to the worker that week. Sources: Upload eCPR guide page 17 and the schema.
Check Summary: Check NumbercheckNumOn the manual form, a text field. DIR's example entered Direct Deposit. In an XML upload, the schema says to enter CASH if paid in cash, or the transaction number if paid by direct deposit, up to 20 characters. Sources: Upload eCPR guide page 17 and the schema.

Three numbers that get mixed up

The hourly rate is per hour. Gross is dollars before anything comes out. Net is what the worker was actually paid.

In an XML upload, the schema's own example is a worker who puts in 32 hours on your public project and 8 hours on another job, at $30 an hour on both. This project is $960 (32 × $30). All work is $1,200. Both are gross.

On the manual form, DIR's Upload eCPR guide shows one gross field to enter, Gross wages for all projects. It does not describe a second gross field. DIR's FAQ still says to report the wages earned on this project and the total gross for all projects, which matches the two XML elements.

In an XML upload, netWagePaidWeek is a required element that holds the dollar amount paid to the worker that week, so take the figure from the check, not from the rate. DIR's FAQ answers a question about a box named Net Wages Paid for Week. It says the box may cover only the public works project or all of the worker's work, depending on whether one check pays everything or you cut a separate check for the project. On the manual form, DIR's guide shows Net Wages in the Check Summary beside the gross and the total deductions and does not list it as a field to enter. DIR does not say whether the form calculates it. If the form asks you for it, the FAQ answer applies.

If one export also feeds the federal WH-347, watch fringe. DOL's instructions keep cash paid in lieu of fringe benefits out of the rate column (6A), while DIR's FAQ puts fringe paid straight to the worker in the hourly wage. On deductions the two agree: DOL says not to pro-rate them by project, and DIR does not ask you to break out tax withheld by project. See WH-347 vs eCPR.

Fringe benefits: in the rate, or in the contribution boxes

DIR's eCPR FAQ draws the line by how the money reaches the worker: fringe paid directly to the worker versus fringe paid into a fund or to a committee. Two statutes are background. Labor Code section 1773.1(a) counts employer payments for health and welfare, pension, vacation, travel, subsistence, and apprenticeship or other training programs authorized by Section 3093, within the statute's limits, as per diem wages. Section 1776(a) requires your records to show the actual per diem wages paid. Two examples, in round numbers that are not prevailing wage rates:

  • Paid in cash. The paystub shows $50.00 an hour, $8.00 of it fringe. Under DIR's FAQ, you enter $50.00 as the rate and 0 in the matching boxes. The FAQ says you can put 0 and reflect the direct pay in the hourly base rate.
  • Paid into a fund. The paystub shows $42.00 an hour, and you pay $5.00 an hour to a health fund and $3.00 to a pension fund. Enter $42.00 as the rate, $5.00 in Health and welfare and $3.00 in Pension. Do not add the $8.00 to the rate.

Both examples follow DIR's FAQ, and DIR's current form example differs for directly paid fringe. The manual form in the Upload eCPR guide adds two check boxes under Employer Contributions, Paid Directly to Worker and Paid to Fringe Benefit Plan. In DIR's example the first box is checked, the straight-time rate is $50.00, Training holds $2.00, and the form shows a total straight-time rate of $52.00. So in DIR's own example the directly paid $2.00 sits in the Training column and is not in the $50.00 rate. DIR's FAQ and its current form example differ here, and DIR does not say which controls, as it does not for deductions. The guide does not explain how the check boxes change the form, so check the totals the form shows against the paystub before you save.

A benefit with no box goes in Other, explained in the notes. DIR ties this to what used to go on a separate fringe benefit statement, which our fringe benefit statement guide covers.

Deductions: total dollars for the pay period, 0 when none

DIR's newer guides and its older FAQ do not agree on how to report deductions. This section says which source gives each answer.

  • Total dollars for the pay period, not hourly. Step 12 of DIR's eCPR XML guidelines, version 2.0 says to enter the total lump sum for deductions. Its example is $121.22 for FICA, meaning $121.22 paid to FICA for all hours worked in the pay period. The Deductions section of the manual form in the Upload eCPR guide is headed total lump sum (non-hourly amounts), with columns for Fed tax, FICA (soc sec), State tax, SDI, Fund/admin, Savings, Dues and Other.
  • Fringe amounts are hourly. The same step says to include hourly amounts for fringe benefits such as pension.
  • 0 where nothing is withheld. DIR's FAQ calls a deduction box with no withholding a required field and says you must put 0. In an XML upload, every field under an employee is mandatory except notes.
  • Exempt from income tax (W-4). DIR's FAQ says you may put 0 and explain in the notes that nothing is withheld.
  • No box for it, such as Medicare. Use Other and say in the notes what it is, per the FAQ.
  • Software that does not break out deductions. The FAQ says you calculate each amount and enter it in its own field. A type with no field goes in Other.
  • Part private, part public pay. The FAQ says to enter wages earned on this project and total gross wages for all projects, which are the two gross elements in an XML upload. You do not break down the tax withheld by project. The XML guidelines describe the deduction lump sum as the total for all hours worked in the pay period.
  • Final week. Writing "final eCPR" in the notes is not required, but the FAQ calls it helpful.

The conflict: DIR's FAQ also says to report deductions, contributions and payments by the hour. In its answer about XML upload errors, the FAQ links to the version 1.9 XML guidelines, whose cover is dated August 2015, and the FAQ page itself is dated October 2015. The newest DIR XML guidelines we found are version 2.0, dated March 2026, so the FAQ is the older source. DIR's XML guidelines and its manual form say lump sum, the FAQ says hourly, and DIR does not say which one controls. If you are unsure, ask DIR at publicworks@dir.ca.gov, the eCPR inbox its FAQ names.

A routine for each worker, each week

The manual form and the XML upload do not take the same fields in the same order. Pick your path.

Manual form

These steps follow the order in DIR's Upload eCPR guide, pages 16 and 17.

  1. Enter the rates and the fringe benefit plan. Under Employer Contributions, check Paid Directly to Worker or Paid to Fringe Benefit Plan. Copy the pre-tax rates from the paystub. Put fringe paid into a fund in the plan columns as hourly amounts, and 0 in the columns that do not apply, as DIR's example does. For fringe paid directly to the worker, DIR's FAQ says to reflect it in the hourly base rate, while DIR's form example shows it in the plan columns with Paid Directly to Worker checked. DIR does not say which controls, so check the totals the form shows against the paystub.
  2. Enter the hours worked.
  3. Enter travel and subsistence for the project, if any. It is its own dollar field.
  4. Enter the deductions as total dollars for the pay period, not hourly amounts. Put 0 where nothing was withheld, and put anything without a box in Other.
  5. Enter Gross wages for all projects. The Check Summary also has a Check Number field.
  6. Enter notes if needed, including an explanation of any Other amount, and save.

DIR's guide shows Total Deductions and Net Wages in the Check Summary, and it says the Total in the Deductions table is auto-calculated by summing the entries. The guide lists no net figure to enter and does not say whether the form calculates it. If the form asks you for one, the FAQ answer on Net Wages Paid for Week applies.

XML upload

The schema fixes the order of the elements in the file, and that order is not the order of the manual form. These steps cover the money elements, which follow the hours in each worker's record.

  1. Copy the pre-tax rates from the paystub into the hourly pay rate elements. DIR's FAQ says to reflect fringe paid directly to the worker in the rate and to leave out fringe paid to funds, while DIR's form example shows directly paid fringe in the plan columns. DIR does not say which controls, and the XML guidelines do not address it.
  2. Enter gross for this project and for all work.
  3. In the deductions group, enter fringe plan amounts as hourly amounts. Enter fed tax, FICA, state tax and SDI as total dollars for the pay period. Enter 0 in every element that does not apply, because every field under an employee except notes is mandatory.
  4. Put anything without an element in other, and explain it in the notes. Enter the total element yourself.
  5. Enter net wages paid for the week and the check number.

DIR's FAQ says a submitted report cannot be deleted. Resubmit the eCPR for that workweek and the amended version replaces the original. See correcting a submitted eCPR, or eCPR XML upload errors if a file bounces.

Handing the table off

WellStanding prepares the WH-347 and the eCPR from the payroll export you already run, and a person reviews every filing before it goes out. You review the finished filing and sign the certification in one step, and nothing is filed until you have signed. The certification is always yours; we never sign for you. First filing free.

You still sign. Section 1776(a) requires each payroll record to carry or be verified by a written declaration under penalty of perjury, and that declaration is yours. See who signs certified payroll. To file from software instead, these payroll systems export eCPR XML.

Questions

Is the hourly wage on the eCPR gross or net?
DIR's FAQ says to give the pre-tax hourly wage, the rate before taxes. It is not a take-home figure. Net pay is a separate figure. An XML upload has its own netWagePaidWeek element for it, and the manual form shows Net Wages in its Check Summary without listing it as a field to enter.
Do I include health insurance and pension in the hourly wage?
Per DIR's FAQ, only if you pay them directly to the worker. If you pay them into a fund or to a committee, leave them out of the wage and use the contribution section. DIR's current form example shows directly paid fringe in the plan columns instead, and DIR does not say which source controls.
What do I enter for deductions if my worker is exempt from income tax?
DIR's FAQ says you may put 0 and explain in the notes that nothing is withheld. It gives this answer for employees who filed a W-4 to be exempt.
What do I put in a deduction box that does not apply?
Put 0. DIR's FAQ calls a deduction box with no withholding a required field and says you must put 0. In an XML upload, every field under an employee is mandatory except notes, per step 9 of DIR's XML guidelines.
Are deductions entered per hour or per pay period?
Per pay period, as total dollars. Step 12 of DIR's eCPR XML guidelines, version 2.0 says to enter the total lump sum for deductions, such as $121.22 for FICA for all hours worked in the pay period. The manual form's Deductions table is headed total lump sum (non-hourly amounts) in DIR's Upload eCPR guide. Fringe benefits such as pension are the hourly amounts. DIR's FAQ says to report deductions, contributions and payments by the hour, while the March 2026 guidelines and the manual form say lump sum for deductions. DIR does not say which controls. If you are unsure, ask DIR at publicworks@dir.ca.gov, the eCPR inbox its FAQ names.
Where do I enter Medicare, or a benefit that has no box?
In the Other box, explained in the notes. DIR gives Medicare as its example, and the same answer for fringe benefits that fit no box.
Does Net wages paid for week cover only the public works project?
Not necessarily. DIR's FAQ says it depends on whether one check pays all of the worker's work or you cut a separate check for the public works project. In an XML upload you enter the figure in the netWagePaidWeek element. The manual form shows Net Wages in its Check Summary, DIR's Upload eCPR guide does not list it as a field to enter, and DIR does not say whether the form calculates it.

Sources

Every figure on this page links to its source where it first appears. The full list, in order:

  1. eCPR FAQ dir.ca.gov
  2. Upload eCPR guide dir.ca.gov
  3. eCPR XML guidelines dir.ca.gov
  4. CPR XML schema, version 1.3 dir.ca.gov
  5. Certified Payroll Reporting page dir.ca.gov
  6. XML guidelines dir.ca.gov
  7. sample file dir.ca.gov
  8. DOL's instructions dol.gov
  9. Labor Code section 1773.1(a) leginfo.legislature.ca.gov
  10. Section 1776(a) leginfo.legislature.ca.gov
  11. version 1.9 dir.ca.gov

Done filling in the payroll table by hand? First filing free

Send the payroll export you already run. We turn it into the WH-347 and the DIR eCPR filing, checked by software and verified by a person. Your first weekly filing is free, before you pay us anything. $995 one time setup, then $249 per month flat.

Got it. We reply the same business day. Next: we confirm your payroll system and the project, you send one export, and your first filing comes back for your review before anything is submitted.

First filing free