<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<CPR:eCPR xmlns:CPR="https://www.dir.ca.gov/Public-Works/CPR/eCPR-v2.xsd">
  <!--Schema version. Do not change this value.-->
  <CPR:version>2.0</CPR:version>
  <CPR:contractorInfo>
    <CPR:contractorName></CPR:contractorName>
    <!--PWCR: Required. Exactly 10 numeric digits. Must match the PWCR on file with DIR.
        Mismatched or missing PWCR will cause a hard submission failure.-->
    <CPR:contractorPWCR></CPR:contractorPWCR>
  </CPR:contractorInfo>
  <CPR:projectInfo>
    <CPR:awardingBody></CPR:awardingBody>
    <!--Project ID: Required. Numeric. Must match the project ID registered with DIR.
        Mismatched or missing project ID will cause a hard submission failure.-->
    <CPR:projectID></CPR:projectID>
  </CPR:projectInfo>
  <CPR:payrollInfo>
    <!--Statement of Non-Performance: Required. Must be exactly "true" or "false" (lowercase).
        Set to "true" when no work was performed during this payroll week.
        When "true", employees may be omitted. When "false", at least one employee
        with hours greater than 0 is expected.-->
    <CPR:statementOfNP></CPR:statementOfNP>
    <!--Week Ending Date: Required. Format: YYYY-MM-DD (e.g. 2026-07-12).
        Must be a real calendar date — invalid dates such as 2026-07-32 will be rejected.
        The payroll week covers this date and the 6 preceding days (Monday through Sunday).
        The earliest allowed week start date is 2010-01-01, meaning the earliest
        allowed forWeekEnding value is 2010-01-07.-->
    <CPR:forWeekEnding></CPR:forWeekEnding>
    <!--Maximum 500 employees per submission.-->
    <CPR:employees>
      <CPR:employee>
        <!--First Name: Required. Must not be empty. Maximum 56 characters.
            If this tag is missing or in the wrong location, the submission will fail.-->
        <CPR:firstName></CPR:firstName>
        <!--Last Name: Required. Must not be empty. Maximum 56 characters.
            If this tag is missing or in the wrong location, the submission will fail.-->
        <CPR:lastName></CPR:lastName>
        <!--Middle Name: Optional. Leave empty or omit if not applicable.
            When populated, stored separately from first and last name. Maximum 56 characters.
            An existing middle name on record will not be cleared if this field is empty.-->
        <CPR:middleName></CPR:middleName>
        <CPR:address>
          <!--Street: Required. Must not be empty. Maximum 40 characters.-->
          <CPR:street></CPR:street>
          <!--City: Required. Must not be empty. Maximum 250 characters.-->
          <CPR:city></CPR:city>
          <!--State: Required. 2 uppercase letters (e.g. CA, NY, TX).-->
          <CPR:state></CPR:state>
          <!--ZIP Code: Required. 5 digit (12345) and 9 digit (12345-6789) accepted.-->
          <CPR:zip></CPR:zip>
        </CPR:address>
        <!--SSN: Provide if the employee has a Social Security Number.
            Format: exactly 9 numeric digits, no dashes or spaces (e.g. 123456789).
            SSN takes priority when both SSN and ITIN are provided.
            Leave empty if using ITIN only. At least one of SSN or ITIN must be populated.
            Each SSN must be unique within the submission — duplicate SSNs will cause
            all affected employees to be rejected.-->
        <CPR:ssn></CPR:ssn>
        <!--ITIN: Provide if the employee does not have an SSN.
            Format: exactly 9 numeric digits, no dashes or spaces (e.g. 912345678).
            Leave empty if using SSN. At least one of SSN or ITIN must be populated.-->
        <CPR:itin></CPR:itin>
        <!--Notes: Optional. Free text, maximum 256 characters.
            HTML tags are stripped before storage.-->
        <CPR:notes></CPR:notes>
        <!--Classifications: At least one classification is required per employee.
            An employee who worked multiple classifications in the same week should have
            one classification element per classification worked.-->
        <CPR:classifications>
          <!--Classification name attribute: Required. Must not be empty.
              Use the official classification name.-->
          <CPR:classification name="">
            <!--Craft: Required. Must not be empty. The craft associated with this classification.-->
            <CPR:craft></CPR:craft>
            <!--Employee Level: Required. Must be exactly "journeyman" or "apprentice" (lowercase).-->
            <CPR:employeeLevel></CPR:employeeLevel>
            <!--Apprentice Level: Required when employeeLevel is "apprentice".
                Must be a whole number from 1 to 10 indicating the apprenticeship period.
                Leave empty when employeeLevel is "journeyman".-->
            <CPR:apprenticeLevel></CPR:apprenticeLevel>
            <CPR:hrsWorkedEachDay>
              <!--Day Entries: Exactly 7 day elements are required, with id attributes 1 through 7
                  in sequential order (no duplicates, no gaps). Day id="1" is the first day of
                  the payroll week; id="7" must be the forWeekEnding date.
                  All 7 days must be present even when hours are 0.0.

                  Date: Format YYYY-MM-DD. Must be a real calendar date. Dates must be
                  consecutive (each day exactly 1 calendar day after the previous) and must
                  all fall within the 7-day window [forWeekEnding minus 6 days, forWeekEnding].
                  Duplicate dates are not permitted.

                  Hours (straightTime, overtime, doubletime): Decimal, up to 2 decimal places.
                  Must be >= 0 and < 100 per individual field. Set to 0.0 if no hours worked.
                  The combined total of ST + OT + DT for any single day across all of this
                  employee's classifications must not exceed 24 hours.-->
              <CPR:day id="1">
                <CPR:date></CPR:date>
                <CPR:straightTime></CPR:straightTime>
                <CPR:overtime></CPR:overtime>
                <CPR:doubletime></CPR:doubletime>
              </CPR:day>
              <CPR:day id="2">
                <CPR:date></CPR:date>
                <CPR:straightTime></CPR:straightTime>
                <CPR:overtime></CPR:overtime>
                <CPR:doubletime></CPR:doubletime>
              </CPR:day>
              <CPR:day id="3">
                <CPR:date></CPR:date>
                <CPR:straightTime></CPR:straightTime>
                <CPR:overtime></CPR:overtime>
                <CPR:doubletime></CPR:doubletime>
              </CPR:day>
              <CPR:day id="4">
                <CPR:date></CPR:date>
                <CPR:straightTime></CPR:straightTime>
                <CPR:overtime></CPR:overtime>
                <CPR:doubletime></CPR:doubletime>
              </CPR:day>
              <CPR:day id="5">
                <CPR:date></CPR:date>
                <CPR:straightTime></CPR:straightTime>
                <CPR:overtime></CPR:overtime>
                <CPR:doubletime></CPR:doubletime>
              </CPR:day>
              <CPR:day id="6">
                <CPR:date></CPR:date>
                <CPR:straightTime></CPR:straightTime>
                <CPR:overtime></CPR:overtime>
                <CPR:doubletime></CPR:doubletime>
              </CPR:day>
              <CPR:day id="7">
                <CPR:date></CPR:date>
                <CPR:straightTime></CPR:straightTime>
                <CPR:overtime></CPR:overtime>
                <CPR:doubletime></CPR:doubletime>
              </CPR:day>
            </CPR:hrsWorkedEachDay>
            <CPR:fringePaid>
              <!--Fringe Payment Method: Required. Both fields must be "true" or "false" (lowercase).
                  At least one of paidToEmployee or paidToBenefitPlan must be "true".
                  paidToEmployee: "true" if fringe is paid directly to the worker as cash.
                  paidToBenefitPlan: "true" if fringe is paid to an approved benefit plan.-->
              <CPR:paidToEmployee></CPR:paidToEmployee>
              <CPR:paidToBenefitPlan></CPR:paidToBenefitPlan>
            </CPR:fringePaid>
            <CPR:fringe>
              <!--Fringe Benefit Amounts: Required. All fields must be present.
                  Decimal, up to 2 decimal places, must be >= 0 and < 100,000,000.
                  Set to 0.0 if no amount applies for a given category.
                  "other" refers to any fringe benefit not covered by the above categories.-->
              <CPR:healthWelfare></CPR:healthWelfare>
              <CPR:vacationHoliday></CPR:vacationHoliday>
              <CPR:pension></CPR:pension>
              <CPR:training></CPR:training>
              <CPR:other></CPR:other>
            </CPR:fringe>
            <CPR:totHrs>
              <!--Total Hours: Required. Each value must equal the sum of the corresponding
                  per-day hours above (e.g. totHrsStraightTime must equal the sum of all
                  straightTime day values). Decimal, up to 2 decimal places, must be >= 0.
                  Set to 0.0 if no hours of that type were worked.
                  The combined total across all three fields must be > 0 unless
                  statementOfNP is "true".-->
              <CPR:totHrsStraightTime></CPR:totHrsStraightTime>
              <CPR:totHrsOvertime></CPR:totHrsOvertime>
              <CPR:totHrsDoubletime></CPR:totHrsDoubletime>
            </CPR:totHrs>
            <CPR:hrlyPayRate>
              <!--Straight Time Rate: Required. Must be > 0 and < 10,000. Decimal, up to 2 decimal places.-->
              <CPR:hrlyPayRateStraightTime></CPR:hrlyPayRateStraightTime>
              <!--Overtime Rate: Required. Must be >= 0 and < 10,000. Set to 0.0 if no overtime applies.-->
              <CPR:hrlyPayRateOvertime></CPR:hrlyPayRateOvertime>
              <!--Doubletime Rate: Required. Must be >= 0 and < 10,000. Set to 0.0 if no doubletime applies.-->
              <CPR:hrlyPayRateDoubletime></CPR:hrlyPayRateDoubletime>
              <!--Sum of hrlyPayRateStraightTime and sum of fringe values.-->
              <CPR:totalHrlyPayRateStraightTime></CPR:totalHrlyPayRateStraightTime>
              <!--Sum of hrlyPayRateOvertime and sum of fringe values.-->
              <CPR:totalHrlyPayRateOvertime></CPR:totalHrlyPayRateOvertime>
              <!--Sum of hrlyPayRateDoubletime and sum of fringe values.-->
              <CPR:totalHrlyPayRateDoubletime></CPR:totalHrlyPayRateDoubletime>
            </CPR:hrlyPayRate>
          </CPR:classification>
          <CPR:classification name="">
            <!--Craft: Required. Must not be empty.-->
            <CPR:craft></CPR:craft>
            <!--Employee Level: Required. Must be exactly "journeyman" or "apprentice" (lowercase).-->
            <CPR:employeeLevel></CPR:employeeLevel>
            <!--Apprentice Level: Leave empty when employeeLevel is "journeyman".
                Required when employeeLevel is "apprentice" — must be a whole number from 1 to 10.-->
            <CPR:apprenticeLevel></CPR:apprenticeLevel>
            <CPR:hrsWorkedEachDay>
              <!--See the first classification above for full day entry rules.-->
              <CPR:day id="1">
                <CPR:date></CPR:date>
                <CPR:straightTime></CPR:straightTime>
                <CPR:overtime></CPR:overtime>
                <CPR:doubletime></CPR:doubletime>
              </CPR:day>
              <CPR:day id="2">
                <CPR:date></CPR:date>
                <CPR:straightTime></CPR:straightTime>
                <CPR:overtime></CPR:overtime>
                <CPR:doubletime></CPR:doubletime>
              </CPR:day>
              <CPR:day id="3">
                <CPR:date></CPR:date>
                <CPR:straightTime></CPR:straightTime>
                <CPR:overtime></CPR:overtime>
                <CPR:doubletime></CPR:doubletime>
              </CPR:day>
              <CPR:day id="4">
                <CPR:date></CPR:date>
                <CPR:straightTime></CPR:straightTime>
                <CPR:overtime></CPR:overtime>
                <CPR:doubletime></CPR:doubletime>
              </CPR:day>
              <CPR:day id="5">
                <CPR:date></CPR:date>
                <CPR:straightTime></CPR:straightTime>
                <CPR:overtime></CPR:overtime>
                <CPR:doubletime></CPR:doubletime>
              </CPR:day>
              <CPR:day id="6">
                <CPR:date></CPR:date>
                <CPR:straightTime></CPR:straightTime>
                <CPR:overtime></CPR:overtime>
                <CPR:doubletime></CPR:doubletime>
              </CPR:day>
              <CPR:day id="7">
                <CPR:date></CPR:date>
                <CPR:straightTime></CPR:straightTime>
                <CPR:overtime></CPR:overtime>
                <CPR:doubletime></CPR:doubletime>
              </CPR:day>
            </CPR:hrsWorkedEachDay>
            <CPR:fringePaid>
              <!--Both fields required. Must be "true" or "false" (lowercase).
                  At least one must be "true".-->
              <CPR:paidToEmployee></CPR:paidToEmployee>
              <CPR:paidToBenefitPlan></CPR:paidToBenefitPlan>
            </CPR:fringePaid>
            <CPR:fringe>
              <!--Fringe Benefit Amounts: Required. Decimal >= 0 and < 100,000,000.
                  Set to 0.0 if no amount applies. "other" covers any fringe category
                  not listed above.-->
              <CPR:healthWelfare></CPR:healthWelfare>
              <CPR:vacationHoliday></CPR:vacationHoliday>
              <CPR:pension></CPR:pension>
              <CPR:training></CPR:training>
              <CPR:other></CPR:other>
            </CPR:fringe>
            <CPR:totHrs>
              <!--Total Hours: Required. Must equal the sum of the corresponding per-day values.
                  Decimal >= 0. Set to 0.0 if no hours of that type were worked.-->
              <CPR:totHrsStraightTime></CPR:totHrsStraightTime>
              <CPR:totHrsOvertime></CPR:totHrsOvertime>
              <CPR:totHrsDoubletime></CPR:totHrsDoubletime>
            </CPR:totHrs>
            <CPR:hrlyPayRate>
              <!--Straight Time Rate: Required. Must be > 0 and < 10,000. Decimal, up to 2 decimal places.-->
              <CPR:hrlyPayRateStraightTime></CPR:hrlyPayRateStraightTime>
              <!--Overtime Rate: Required. Must be >= 0 and < 10,000. Set to 0.0 if no overtime applies.-->
              <CPR:hrlyPayRateOvertime></CPR:hrlyPayRateOvertime>
              <!--Doubletime Rate: Required. Must be >= 0 and < 10,000. Set to 0.0 if no doubletime applies.-->
              <CPR:hrlyPayRateDoubletime></CPR:hrlyPayRateDoubletime>
              <!--Sum of hrlyPayRateStraightTime and sum of fringe values.-->
              <CPR:totalHrlyPayRateStraightTime></CPR:totalHrlyPayRateStraightTime>
              <!--Sum of hrlyPayRateOvertime and sum of fringe values.-->
              <CPR:totalHrlyPayRateOvertime></CPR:totalHrlyPayRateOvertime>
              <!--Sum of hrlyPayRateDoubletime and sum of fringe values.-->
              <CPR:totalHrlyPayRateDoubletime></CPR:totalHrlyPayRateDoubletime>
            </CPR:hrlyPayRate>
          </CPR:classification>
        </CPR:classifications>
        <CPR:payments>
          <!--Travel Subsistence: Required. Employer-paid travel allowance — not a wage deduction.
              Decimal, up to 2 decimal places, must be >= 0 and < 100,000,000.
              Set to 0.0 if no travel subsistence was paid.-->
          <CPR:travelSubs></CPR:travelSubs>
        </CPR:payments>
        <CPR:deductions>
          <!--Wage Deductions: All fields required. Decimal, up to 2 decimal places.
              Each value must be >= 0 and < 100,000,000. Set to 0.0 if no deduction applies.
              If a tag is missing or placed outside this block the value will be treated
              as missing and the submission will fail.
              "other" covers any deduction category not listed above (e.g. miscellaneous).
              Note: travelSubs is NOT a deduction and belongs in the payments block above.-->
          <CPR:fedTax></CPR:fedTax>
          <CPR:FICA></CPR:FICA>
          <CPR:stateTax></CPR:stateTax>
          <CPR:SDI></CPR:SDI>
          <CPR:fundAdmin></CPR:fundAdmin>
          <CPR:savings></CPR:savings>
          <CPR:dues></CPR:dues>
          <CPR:other></CPR:other>
          <!--Sum of all above deductions.-->
          <CPR:totalDeductions></CPR:totalDeductions>
        </CPR:deductions>
        <CPR:earnings>
          <!--Gross This Project: Required. Total gross wages earned on this project this week.
              Decimal, up to 2 decimal places, must be >= 0 and < 100,000,000.-->
          <CPR:grossThisProject></CPR:grossThisProject>
          <!--Gross All Work: Required. Total gross wages earned across all work this week.
              Decimal, up to 2 decimal places, must be >= 0 and < 100,000,000.-->
          <CPR:grossAllWork></CPR:grossAllWork>
          <!--Net Wage Paid This Week: Required. Net wages after all deductions.
              Decimal, up to 2 decimal places, must be >= 0 and < 100,000,000.-->
          <CPR:netWagePaidWeek></CPR:netWagePaidWeek>
          <!--Check Number: Required. The check or transaction number for this payment.
              Use "CASH" for cash payments. Maximum 20 characters.-->
          <CPR:checkNum></CPR:checkNum>
        </CPR:earnings>
      </CPR:employee>
    </CPR:employees>
  </CPR:payrollInfo>
</CPR:eCPR>