# From field work to a saved invoice — local v0.16

This checkpoint verifies one complete owner journey using a new, separate fictional dataset. It does not change the live SHS website or PWA, or approve the full product for real use. The existing owner review remains on frozen v0.12.1 at port 8788.

The [verification record](journey-milestone-checks.json) separates automated tests, actual browser actions, downloaded files and the terminal/API recovery check. All operational records in this journey were created through the interface. The recovery script later created only temporary access probes, not jobs, costs or invoices.

## What the verified example contains

| Saved item | Evidence |
| --- | --- |
| Customer and job | Riley Fictional; Shelf fitting journey; in progress |
| Person | Casey Test, internal hourly cost £24 |
| Booking | 28 October 2026, 14:00–15:00 GMT |
| Received materials | Two shelf brackets at £5.25 internal cost each: £10.50 |
| Actual timer capture | 21.641 seconds, retained with its original intervals |
| Explicit fictional correction | 14:00–14:30 GMT, with a reason explaining the training exercise |
| Converted labour | One active 30-minute entry; £12 saved internal cost |
| Combined work cost | £22.50, separate from the customer prices |
| Customer lines | 0.5 hours at £60 = £30; two brackets at £8 = £16 |
| Direct invoice | I-0001, £46, explicitly issued locally with demonstration VAT 0% |
| Manual receipt | £20 invented record; no actual payment or bank confirmation |
| Remaining balance | £26 after reload, server restart and fresh restore |

The half-hour was **not measured by the timer**. It was a deliberate, labelled fictional correction. In actual use, correct only missing or mistaken work supported by evidence; do not treat this training example as an elapsed-time claim.

## Repeat it in a fresh fictional dataset

1. Use a new data folder and a free loopback port. Follow the setup and stopped-backup instructions in the README. Do not open this version against the preserved owner-review folder. The completed QA server has been stopped.
2. Sign in with the prefilled Oak & Vale demo account. Add an invented enquiry, then set the job to **in progress**. Keep owner notes private.
3. In **Team**, add a named fictional person and an explicit internal hourly cost. This creates a scheduling resource, not a staff login. In **Calendar**, save a booking for that exact job and person.
4. In **Materials**, add the two brackets to the exact job, explicitly enter their internal unit cost and received date, and save as **received**.
5. In **Field work**, choose the job and person. Start a timer, add an optional private work note, then **Stop for review**. Keep this view open during capture. No offline queue is running.
6. Inspect the original interval and enter an owner review reason. A tiny capture that rounds to zero minutes cannot be converted. In this test that rejection kept the reason in the form and created no labour entry. A later explicit correction retained the original interval and the earlier review in history.
7. Review the rounded minutes and saved rate, enter a reason and choose **Record reviewed labour at saved internal rates**. This creates labour once. The job's **Recorded labour entries** identifies converted Field work and directs corrections back to that review; it no longer offers unavailable manual-edit actions for generated entries.
8. Mark the private note reviewed, then **Refresh available sources**. Select the whole field and material sources. Customer unit prices begin blank: enter them deliberately. Private supplier costs are not customer charge rates.
9. Choose **Invoice draft**, review customer wording, quantities, prices and demonstration VAT, tick the acknowledgement and save the private draft. The invoice list refreshes after saving. The sources are now reserved and cannot be selected for another draft.
10. Open **Quotes & invoices**, manage the invoice and inspect it. Choose **Issue locally**, review the confirmation and confirm. This seals the document for the local customer view. No email is sent and no quote acceptance is invented for this direct-invoice path.
11. Choose **Record payment** and save an explicitly invented partial receipt. This only records an example; it does not collect or move money. Reopen the invoice to check the remaining balance.
12. Download the private PDF and inspect the customer content. Open **Reports** directly or use **Inspect in Reports** on Overview. Check person time, costs, invoice value, receipts and balance. The cohort separately discloses direct invoices rather than filling in absent quote stages.
13. Sign out of this QA session and open Harbour Homeworks. It should remain empty and deny access to the exact Oak invoice URL.

Manually entered invoice lines have no source identity, so source reservations cannot detect equivalent manually typed charges. Partial-source billing, paid credits/refunds and bank reconciliation remain separate work.

## Repairs found during this walkthrough

- Overview previously showed £160 of draft/shared quotes in the v0.15 fixture while Reports and Operations showed £120 of current eligible quotes. All three now use one rule: current draft/shared revisions, open unarchived jobs, and inclusive UK expiry. Blank expiry is allowed; malformed nonblank expiry is excluded and disclosed as unknown in Reports. Accepted, superseded, cancelled, expired and closed-job quotes are excluded. The fixture now gives £120 in all three views without rewriting records or transferred identities.
- Source-reviewed drafts previously saved correctly but left the workspace's document list stale. A real UI price revision showed £47 immediately, then the final reviewed £46 immediately, without a page reload. Both private revisions remain in history; £46 was the amount issued.
- The job view previously called converted field labour “manual time” and offered manual correction/archive controls that the server rejected. It now labels the origin and directs corrections to Field work while retaining history.
- A job with only a direct invoice previously also said “No documents yet.” The empty state now checks both quotes and invoices.

Overview receipts remain **all dates**. Reports and Operations receipts use their selected period. In the existing regression fixture these are £50 all dates and £40 in October; its current balance is £100. Aligning open quotes does not erase that useful distinction.

## What passed and what remains

611 backend tests, 94 client tests, 79 structural render checks and the build passed. The browser journey verified save/reopen, rejection input retention, original timer evidence, explicit correction/conversion, duplicate source protection, private invoice creation/issue, receipt/balance, report definitions and the empty second business. Structural renders are not interactive browser tests.

Two actual browser downloads were retrieved: the one-page invoice PDF and a 29-row service-summary CSV. The PDF was extracted and rendered for visual inspection; it contains £46 original value, £20 recorded and £26 due, with no private notes, supplier/SKU, person identity or internal cost/rate. The CSV retains exact integer pence and reconciles to the report. This was an **owner download of customer-facing content**; it does not establish a new customer-portal invoice-download test or browser-print result.

The stopped dataset was backed up with the existing format-11 tool and restored into a fresh folder on this Mac. Exact work/document/source histories and report objects survived, and report CSV bytes matched at the same observation time. New dataset identities and the deliberate access reset were the only expected record differences, alongside the restore audit. Old sessions/passwords failed; fresh restored test-API logins and a second-generation backup passed. This was terminal/API recovery verification, not a restored browser or second-machine rehearsal. Credentials and runtime records remain outside the code ZIP.

Staff-assigned/two-person capture, photos and material-log conversion, pause/resume, backgrounded phones, recurrence, feedback publication and wider customer correction journeys still need interactive coverage. Physical phones, touch, screen readers, installed PWA/offline behaviour, external integrations, subscriber domains, subscriptions, complete source/rights evidence and independent production security remain open. The [45-capability register](FULL-PARITY-REGISTER.md) and all 14 original SHS findings remain intact.
