Contents Inventory

How the Documentation sub-phase turns work-area photos into one inventory list that feeds every Contents sub-phase estimate.

A Contents phase is split into sub-phases: Documentation, Pack Out, Textiles, Electronics, Art, Contents Cleaning, Storage, Pack Back. The sub-phase strip sits under the phase name; switching sub-phases never leaves the phase. On the Documentation sub-phase, you turn the photos uploaded to each work area into one priced inventory list. Every other sub-phase reads from that list. A claim can have hundreds of damaged items, so Documentation is built so you don't have to type them all in by hand.

The big picture

Documentation: photos → you click Analyze → AI inventory → you refine
        ↓ (one list, filtered per sub-phase)
Pack Out · Textiles · Electronics · Art · Cleaning · Storage · Pack Back
        ↓
Each sub-phase generates its own estimate
  1. A field tech uploads photos of damaged contents to each work area on the Work Areas tab.
  2. Once a work area's photos are all uploaded (and any bad shots removed), you click Analyze on that work area. The AI reads every photo and produces one inventory row per identifiable item, each categorized (Textiles / Electronics / Art / Contents) and marked salvageable or a total loss. Analysis does not start on its own while photos are uploading, so it runs once, on a clean set.
  3. You step through the list, fix anything the AI got wrong, set the Pack out toggle and method on items that will be packed out, and add notes for the adjuster.
  4. Each other sub-phase shows a filtered slice of that one list and generates its own estimate from its own tab.

Uploading photos to work areas

Photos always live on a work area, never on the phase directly. A work area is one bounded space within the loss, such as a master bedroom, a basement laundry, or the contents of a single closet. Multiple work areas per phase is the norm.

Open the Work Areas sub-tab, pick a work area (or create one), and upload photos there. You can drag-and-drop a whole folder, or attach from a mobile capture session. Photos land on the work area as Pending; uploading does not start analysis. When the work area's photos are all in and you've removed any bad shots, click Analyze N photos on that work area, or Analyze all at the top to run every work area at once. Running analysis on the complete set keeps counts accurate and avoids paying to re-read half-uploaded batches. Add more photos later and they arrive Pending again; click Analyze again to fold them in. Already-analyzed photos are not re-read.

Photo tips for accurate counts

The AI counts what each photo shows, so a few capture habits keep the quantities close to reality:

  • Fill the frame with the item you're documenting. Get close. A clear, isolated shot beats a wide shot of the whole room, and it keeps unrelated items out of frame.
  • Don't pan the same shelf or pile across many photos. Items in the background of several shots get counted more than once, so one remote control can come back as a dozen. Capture an item, then move on.
  • One photo is enough for a group of identical things. A box of glasses or a stack of records reads as a single line with a quantity, so you don't need a separate shot per piece.
  • Keep it in focus and well lit, with minimal background clutter. Clean frames give the cleanest counts.

If a quantity still comes back high because the same object was caught in many backgrounds, edit the count on that line. Your change is kept and isn't overwritten on the next run.

How AI extraction works

For each photo the AI tries to identify every distinct salvageable item in frame and produces an inventory row containing:

  • Description: what the item is, including any visible brand, material, and size cues
  • Quantity: how many of that item appear in the photo (it dedupes across multiple shots of the same room)
  • Condition: its assessment of damage severity
  • Salvageable / Non-salvageable: whether it's worth attempting to clean
  • Code: the cleaning price code the AI thinks applies, based on item type and condition
  • Source photo: a thumbnail link back to the photo the row came from

The AI errs toward extracting too much rather than too little, since an extra row is easier to delete than a missing item is to notice. Anything ambiguous gets a low-confidence guess that you can correct in the next step.

The "X failed · Retry" pill

If some photos couldn't be processed (corrupted upload, model timeout, network blip), they show up in a yellow pill at the top of the tab, labelled 14 failed · Retry. Click it to re-run just the failed photos. Successful items aren't touched.

Refining the inventory

You'll spend most of your time on the inventory grid. A few mechanics worth knowing:

Click any thumbnail to open the detail view

The detail view is the quickest way to review. The source photo sits on the left, the row's editable fields on the right. From inside the detail view:

  • ← / → step to the previous / next row without leaving the detail view
  • Edit any field side-by-side with the source photo
  • Add adjuster-facing notes per item
  • Esc closes back to the grid

Use the grid for scanning and bulk operations, and the detail view to work through a specific item.

Pick the canonical photo

An inventory row that came from AI typically has several source photos: the wide shot, the close-up, a different angle. The first photo (chronologically) is the row's canonical thumbnail by default. That's the one that shows up in the grid, on the estimate's line item, and on the customer-sent PDF.

When the auto-picked photo isn't the best one (too far away, or an unrelated object dominates the frame), pick a better one from inside the detail view. Click any source photo in the filmstrip below the main photo, then Set as canonical at the top of the photo viewer. A small star pins the chosen photo so you can see which one is canonical.

The canonical choice applies everywhere the row's thumbnail appears, including the line-item column on the estimate and the customer-sent PDF (when those columns are turned on; see "Estimate options" on the Estimate tab).

Duplicate a row and split a mis-grouped line

Sometimes the AI puts two genuinely different items on one line. For example, a can of corn photographed next to a can of green beans, same brand, can end up as one "green beans" row carrying both photos. Splitting it into two lines takes a few seconds:

  1. Duplicate the row. Use the copy icon in the row's actions, or the Duplicate button in the photo viewer. You get an identical second row, with the same fields and photos, directly below.
  2. Rename one side. Open each row and correct its description (e.g. one stays "green beans", the copy becomes "canned corn").
  3. Remove the photo that doesn't belong. On a row with more than one photo, hover a thumbnail in the photo viewer's filmstrip and click the in its corner. That detaches the photo from this row only; it stays on the work area and on the other split row, so each line keeps only its own photo. Removing a row's last photo removes the row itself, since an item with no photo has nothing to price. If an estimate was built from that item, you'll be told before the delete, and the estimate is marked out of date until you regenerate it.

Duplicating from inside the photo viewer takes you to the new copy and flags it, so you can rename and trim it without losing your place. A duplicated or photo-edited row becomes a manual entry that the AI won't re-merge or re-number. If you later upload more photos to the same work area, the AI re-analyzes that room and may re-suggest the original combined item alongside your split lines; re-split it if that happens.

Salvageable

The AI marks every item salvageable or a total loss straight from the photo. Heavy water saturation of porous goods, mould growth, char/soot penetration, structural deformation, or porous contents in Cat 2/3 water all read as non-salvageable; surface soiling on hard non-porous goods reads as salvageable. Review those calls. Your toggle always wins over the AI and survives re-analysis.

The same status shows on the project Photos tab, on each photo that represents an item, and you can set it there too. Changing it on the photo updates the item here; changing it here updates the photo. It also drives the salvageable / not-salvageable filter clients can use on a shared photo link.

Non-salvageable items are:

  • Excluded from the cleaning sub-phase estimates (you're not pricing labour to clean something that's going to the dumpster)
  • Listed on the Statement of Loss, which is the schedule of items the insured is claiming as a total loss

Pack-out (automatic)

After the AI builds the inventory list, a second AI pass automatically packs out every salvageable item:

  • Pack out is set to on.
  • Method: soft goods (clothing, linens, towels, bedding, paper, plush) go in bags; small rigid, fragile, electronic or valuable items go in boxes; bulky items like furniture, appliances, TVs and tables are wrapped.
  • Container number: assigned phase-wide as tracking IDs: B1, B2, … for boxes, G1, G2, … for bags, and W1, W2, … for wrapped items. Numbering continues across work areas so the IDs you see on the packing slip are unique inside the phase. Boxes and bags are filled up to a set capacity (~8 items per box, ~12 per bag); when the next item would overflow, the AI opens the next container. Wrapped items are numbered individually.

Edit any of those three fields on the Documentation grid to override the AI. A row you've edited is left alone: the next pack-out run skips it (no method change, no renumbering, no toggle flip) and orphan-cleanup leaves it alone.

To remove an item from pack-out completely, switch Pack out off, and the method and container clear.

Bulk edits

Select multiple rows with the row checkboxes, and a toolbar appears above the table with bulk actions:

  • Toggle salvageable: if any selected row is currently non-salvageable, every selected row is set to salvageable. Otherwise (all currently salvageable) they all flip to non-salvageable. One button covers both directions, so a mixed selection always has a single useful action.
  • Toggle pack out: same behavior as Toggle salvageable, but for the pack-out flag. Turning pack-out off in bulk also clears each row's pack method and container number, matching the per-row behavior.
  • Pack method → Bagged / Boxed / Wrapped: sets the pack method on every selected row. Rows that weren't already packed-out are flipped on as part of the same write, so the method and container columns become visible right away.
  • Delete N: soft-deletes the selected rows.

Pack-out flags drive the Pack Out, Storage and Pack Back sub-phases. The cleaning sub-phases ignore the flag.

Sub-phases: one list, many views

Every sub-phase reads the same Documentation inventory list, filtered:

  • Documentation: the full list; the only place you edit it.
  • Textiles / Electronics / Art / Contents Cleaning: salvageable items of that category.
  • Pack Out / Storage / Pack Back: items with the Pack out toggle on.

Switch sub-phases from the strip under the phase name. The Inventory, Estimate and Invoice tabs all follow the active sub-phase.

Codes auto-resolve at estimate time

The Code column on the grid is a hint. When you click Generate Estimate, the estimator runs an AI matching pass: for every salvageable item it looks at the item type and the project's loss type, pulls the relevant cleaning codes from the active price book for your region, and picks the best match. Each matched line item carries a confidence level (High / Medium / Low) and one or two alternative codes you can swap to, visible on the Estimate tab, the same as any other AI estimate.

If the AI can't confidently match an item, a deterministic keyword lookup picks a code so every salvageable item still gets priced. Those land as Low confidence so they're easy to spot and review.

You only need to override the Code column when:

  • You disagree with the AI's call on what kind of item it is (e.g. AI tagged it as upholstered when it's actually leather, which has a different cleaning code)
  • You're applying a specific regional or carrier-mandated code that the auto-resolver doesn't know about

A code you override by hand is honored as-is, and the estimator won't re-match it. When the AI got it right, leave the Code column alone and the estimator will pick the canonical one.

Generating estimates

Estimates are generated per sub-phase, not for the phase as a whole. Switch to a sub-phase tab and generate from there:

  • Textiles / Electronics / Art / Contents Cleaning: the AI matcher prices cleaning codes for that category's salvageable items. Electronics also adds an hourly bench-testing line so you can confirm each unit still works. Textiles also adds one whole-job ozone-chamber line: textiles are deodorized together in a single chamber, priced per cubic foot, never per garment.
  • Pack Out: a handling estimate (boxes, bags, stretch film, labour) derived from the pack-out items. The pack-out AI fills in method and container numbers automatically; if you've overridden every salvageable row to non-pack-out, this estimate stays empty.
  • Pack Back: mirrors the Pack Out estimate; generate Pack Out first.
  • Storage: estimates off-site storage from boxed containers, bagged containers and wrapped bulky items; the line is priced per month, so set the quantity to square feet × months for the storage duration.
  • Documentation: a time-and-materials estimate. Field documentation labour (from the spread of photo timestamps) plus an evaluate, tag, and inventory line for every catalogued item, since the tech tags and inventories everything during the visit whether or not it gets packed out.

Each sub-phase keeps its own revision history, so you can iterate on one without disturbing the others.

Packing materials at a glance

On the Pack Out and Pack Back sub-phases, the Inventory context panel shows a Packing materials summary beneath the salvage triage: how many boxes, bags, and shrink-wrap rolls the packout needs. Boxes and bags are exact: they're the count of distinct box (B…) and bag (G…) container numbers. Shrink wrap is an estimate off the wrapped-item count, so it reads "about N rolls."

Before you generate the estimate, these numbers come straight from the inventory list and update live as you toggle pack-out or change pack methods. Once you generate the estimate, the estimate becomes the source of truth: the AI sets more precise quantities, you can hand-edit the box/bag/stretch-film lines, and the panel shows those exact numbers. If you change the inventory after generating, the panel keeps showing the estimate's numbers but flags that the inventory has changed so you know to re-generate.

Next steps

Once an estimate has been generated, you'll work with it on the Estimate sub-tab. See Working with estimates for the full workflow on editing line items, applying templates, copy-pasting between phases, and sending the estimate to the client for sign-off.