# Each repair's photos printed right under the repair

> Biloh's job reports now print each repair's photos directly under that repair, labelled before, during or after, so a client reads the work and sees the proof together. The owner's own three-repair roof report was the test case, and every page was checked as the client will see it.

URL: https://biloh.com.au/docs/field-notes/photos-under-each-repair
Category: Field notes | Audience: evaluator | Updated: 2026-10-30

**At a glance**

- **Who it's for:** People deciding whether Biloh fits their business
- **What it does:** [A branded report with the photos, sent with the bill](https://biloh.com.au/capabilities/job-reports)
- **Tools it uses:** [`add_job_report_photos`](https://biloh.com.au/connect#add_job_report_photos) · [`update_job_report`](https://biloh.com.au/connect#update_job_report) · [`get_job_report`](https://biloh.com.au/connect#get_job_report) · [`render_artifact_pdf`](https://biloh.com.au/connect#render_artifact_pdf)

## What the business needed

The owner's own repair reports show each repair with its before, during and after photos directly underneath, so the client never has to match pictures to work. Biloh's report needed to read the same way — every photo under the repair it proves, labelled by stage — and an assistant needed to be able to file photos that way as it built the report.

## What happened

It now does. The owner's own roof report — three repairs, twelve photos — printed with every photo under the right repair, in the right order, labelled by stage, on clean pages: repairs one and two on page one, repair three and its photos together on page two. Older reports with unfiled photos print exactly as they always did.

## How it works

- **Two facts per photo.** Each photo can carry the section it belongs to and its stage: before, during or after. `add_job_report_photos` sets them on the way in — by upload link, direct upload or the contractor's own completion photos — and `update_job_report` moves a photo later. `get_job_report` returns them.
- **Filed correctly or not at all.** A photo filed under a section the report does not have is refused, naming the section, and so is an edit that would remove a section photos are filed under. Nothing is moved quietly.
- **A page a client can read.** Each section's photos print straight after its text, three to a row, with the stage in capitals above each caption. A short section and its first row of photos are kept together, so a heading never sits alone at the foot of a page.
- **Old reports unchanged.** Photos with no section keep the numbered grid at the end.

## Proof

- The owner's three-repair roof report: all twelve photos under the right heading, in order, confirmed by their position in the rendered PDF's text.
- Every page checked as the client will see it, rendered with `render_artifact_pdf`.
- Eleven new tests covering placement, labels, the end grid, refusals, reordering, re-filing and the upload link, written and seen failing before the change; the existing report, attachment and catalogue suites stayed green.

## For the next agent

1. File photos with a section and stage as you upload them — one call instead of two.
2. Render the PDF with `render_artifact_pdf` and look at it before you attach it. It is the client's view.
3. If a section number is refused, `get_job_report` shows the report's real section count in one call.
