> ## Documentation Index
> Fetch the complete documentation index at: https://docs.comforthub.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Complete a work order

> The last tap of a visit, and everything it sets in motion

export const Touches = ({systems}) => <p>
    <strong>Systems involved:</strong>{" "}
    {systems.split(",").map((s, i) => <span key={s}>
        {i > 0 ? " · " : ""}
        <a href={"/systems/" + s.trim()}>{s.trim().replace(/-/g, " ")}</a>
      </span>)}
  </p>;

<Touches systems="the-7am-app, supabase-backend, zoho-crm, quickbooks" />

When the work is done, the technician checks the completion note and taps **Complete**. That one action closes every appointment on the job and the work order itself, on both sides, stamps who and when, makes the job's equipment, and starts billing.

## Before you start

* Every required action on the work order done: checklists answered, and a serial and a photo for each piece of equipment on the job. Until they are, **Complete** stays greyed out.
* The completion note written. The box starts filled in; see below.

## Steps

<Steps>
  <Step title="Check the note">
    Read the completion note and the recommendations, and change what does not fit the visit.
  </Step>

  <Step title="Tap Complete">
    Tap **Complete**. The app asks **Complete this work order?**
  </Step>

  <Step title="Confirm">
    Tap **Complete** again. The appointment and the work order are marked complete with the time, and the work order with your name and your note.
  </Step>
</Steps>

## The completion note starts from a template

Opening the note fills the box for you. For a service, maintenance or installation job the app writes in the template for that type of job, and the recommendations box from a second template; you then change what does not fit. Every other type of job opens with an empty box on purpose. A note holding a blocked word cannot be saved.

The templates and the blocked words are rows in the engine, not in the app: a developer changes a template row, and the next note started in the app uses the new wording. No app release is needed.

## Tapping Complete makes the job's equipment

Each line whose product converts to an asset becomes a piece of equipment on the customer, at their service address, whether the job was booked from the **Service calendar** widget in Zoho or typed straight into Zoho. The piece is added to the work order's equipment list in Zoho too. A job that already has equipment gets none added, so a widget-booked installation, which made its equipment at booking time, is left alone. The model, brand and type come from the product; the serial and the photos are what you record on site.

## How you know it worked

* In Zoho, the appointment and the work order show **Completed**, with **Completed By** and **Completed At**. **Completed At** is the moment of the tap.
* Once billing has run, the work order's **Billing Status** reads **Invoiced**, unless the job has nothing billed to the customer.

## What happens next

Billing runs on its own: the engine builds the invoice from the lines billed to the customer, or marks a job with only warranty and plan lines **Non-Billable** and stops there. See [How invoicing works](/handbook/invoicing/how-invoicing-works). A completed visit produces a certificate when the checklists answered on it all share the Maintenance or Commissioning category; a Service job never produces one. See [Certificates](/handbook/invoicing/certificates).

## If the job was completed in Zoho instead

The status reaches our side, the completion time is stamped here and sent back to Zoho's **Completed At**, and billing runs the same way. The equipment is made too. The completion note and **Completed By** stay empty, so complete from the app when you can.

## Related

* [A visit in the app](/handbook/on-site/a-visit-in-the-app)
* [Answer a checklist](/handbook/on-site/answer-a-checklist)
* [How invoicing works](/handbook/invoicing/how-invoicing-works)
