Void Post Inspection Form¶
Live dependencies & version history: see the auto-generated catalog page — its Dependencies & Related section lists the sub-forms, sub-tasks and workflows that use this form, refreshed on every dev pull.
The Void Post Inspection form is the void handover / post-inspection checklist, run by
voids officers after works are complete. It is order-driven: launched from a QL order
with an Order Appointment diary configuration (60 min), not selected from Property Search.
Ticket 22387 (Jo Blackburn, owner Andy Tyler) asked for a "new" digital void
post-inspection checklist. Peter and Mark were right that one already existed — the work
was an extension of a stale form, not a new build. The form already carried the QL
order launch, the diary appointment, the PostInspection / CompleteOrder QL write-back,
the EDRMS DocEx handler (VoidPostInsp) and the Transaction_Task_VoidPostInspection*
warehouse tables. The fact it is order-driven also settled Jo's own open question about
whether to launch it from Property Search.
⚠ Three records share this name — check the id, not the version number¶
Version numbers are not comparable across environments, and the highest number is not the newest content. Confirm the record id per environment before doing anything:
| Env | Record id | Version | Items | Note |
|---|---|---|---|---|
| Dev | bfc2b5bc-f079-ec11-8df1-000d3ad48fe9 |
v9 (active + latest) | 548 at v3 | The newest content — v3 modified 30/04/2026 by WrighM |
| Test | cbea7488-dfbe-eb11-8de9-000d3ad48fe9 |
v28 | 536 | 2022 content despite the high number |
| Live | 01c8873c-… |
v18 | 536 | 2022 content |
The on-disk Void+Post+Inspection_28.form is the Test lineage — not Dev. This is the
extracted/ filename collision trap. The pristine Dev
baseline is Void+Post+Inspection_3.form (md5 8f590992…, verified byte-identical to a
fresh single-form Dev download).
All three are structurally the same form — the same five branches plus the Inspection Hub
and the Meter_* / Misc_* item families — so a design validated against one holds for
the others.
Version history (Dev record bfc2b5bc…)¶
| Version | Date | Summary |
|---|---|---|
| v0–v2 | — | Original build (Lewisr) |
| v3 | 30/04/2026 | Baseline before ticket 22387 — 548 items (WrighM) |
| v4–v6 | 29/07/2026 | ⚠ Corrupt drafts from hand-authored package metadata — inert, see below |
| v7 | 29/07/2026 | Recovery — MS-exported v3 re-imported; content == v3 |
| v8–v9 | 29/07/2026 | Ticket 22387 — Lettable Standard branch. v9 active |
What v9 added — the Lettable Standard branch¶
A sixth branch off the Inspection Hub, plus its Hub button. 70 new items; all existing branches untouched.
- 22 ×
LS_QNNYes/No/N-A questions, each with anLS_QNNCommentsbox gated on answer ≠ Yes - 19 ×
LS_QNNPhoto LS_KeysSupplied,LS_FobsSupplied,LS_FobsPhoto,LS_ItemsToFitMeter_ElectricLocation,Meter_GasLocation,Meter_ElectricDebt
Visibility gates use Conditions, not JS Expressions, so the ~178-character expression truncation cannot bite.
Scripts: versaa-rag/transform_void_post_insp_lettable_standard.py →
versaa-rag/build_void_post_insp_package.py. Build artefacts live in
versaa-rag/staging/void_post_insp/ — deliberately not in extracted/forms/Forms/,
which convert_exports.py globs and would turn a build artefact into a catalog page.
The transform mints formula/element ids with
uuid.uuid4(), so its output is not byte-reproducible.Void+Post+Inspection_ls.formin the staging folder is the exact artefact that became Dev v9 — keep it.
⚠ Two packaging hazards specific to this form¶
1. The catalog page reports the wrong version.
wiki/catalog/forms/Void_Post_Inspection.md
shows current_version: "28" even immediately after a clean Dev pull. The catalog picks the
highest _N filename, and _28 is the Test lineage (cbea7488…). Dev is on v9
(_9.form, bfc2b5bc…). Read the version from Management Studio or from the id= on line
1 of the .form — not from this form's catalog page.
2. The package entry name collides with the pristine baseline. The LS package is cloned
from VPI-v3.ftpackage, whose .rels Target is Forms/Void+Post+Inspection_3.form, so the
built package carries that entry name too — and the watcher extracts it straight over
extracted/forms/Forms/Void+Post+Inspection_3.form, the pristine Dev v3 baseline the
transform reads as input. It has not bitten since v9 shipped (the baseline currently
verifies at md5 8f590992ce4ce212639501a14039fdda), but a --force reprocess would clobber
it with LS content and a re-run of the transform would then double-apply the branch.
A recovery copy is kept at
versaa-rag/staging/void_post_insp/Void+Post+Inspection_3_BASELINE.form (same md5). Verify
the baseline hash before re-running the transform. Renaming the package entry is not the
fix — the .rels Target would have to change with it, and hand-editing package metadata is
what produced the corrupt v4–v6 in the first place.
Completion chain (verified)¶
Void Post Inspection.OrderApptComp → Order Appointment Completion, which fans out:
| Message | Goes to |
|---|---|
.UpdateHMSData |
Void Post Inspection QL Update (PostInspection + CompleteOrder) |
.GenerateMRDocument |
Void Insp Meter Readings |
.GenerateDocument |
Generic Generate Document |
.ExportToSharePoint |
DocEx handler, docType VoidPostInsp |
.SaveToDataWarehouse |
Transaction_Task_VoidPostInspection* |
The completion email needs no new workflow. Generic Generate Document (15 steps)
already renders, saves and emails with the attachment, gated on Form_EmailRecipient /
Form_DocumentEmailAttachmentName; Form_EmailFrom defaults to $ENV_DefaultEmailFrom$
and the form already has Form_DocumentTemplateName. So the email is a form-items-only
change. (Void Pre Insp Prop Email is a different, property-changed email — don't
confuse the two.)
Gaps still open¶
- §2's 24 Yes/No/N/A questions — addressed by the
Lettable Standardbranch (22 of them). The pre-existingMisc_*partial equivalents were left alone on purpose: the Word template and the warehouse tables bind to them. Form_Email*items — coded but not emitted; pass--email-recipient <mailbox>once Jo confirms the planning-team mailbox. Deferred so both changes land in one import (MS burns a version per import).QLpost_contact block — not yet built. Copy theQLcrm_block from_Data Itemsand leave all*_Use … Client No= Yes.Form_OperativeName/Form_InspectionDateexist but are not displayed.- Word template bindings (~24 + 20) — manual, via the Connector field picker; binding
GUIDs are server-allocated and cannot be scripted. Fallback is one repeating
LS_Photosgroup.
⚠ QL side is not ready¶
The requirement doc's embedded image is a QL CRM classification grid
(EMPTYHOMES/POSTINSPEC/{PASSED,FAIL}/{CLEAN,REPAIRS,WITH WORK}/{CLEAN}) — i.e. a
contact classification. Separately, Aareon.QL-x.PostInspResults actually holds only
TEST / ERROR / SATISFACTO / UNSATISFAC / INCOMPLETE — Jo's five outcomes are not in
it.
Every Action Code in that classification grid is BLANK. Per gotchas that is the RT0016 silent-fail pattern: contacts arrive, nothing fires, no error is raised. Flag to Peter — classification config is not environment-synced.
Open questions for Jo¶
Planning-team mailbox; whether photos are mandatory; keys/fobs as numeric counts; whether
§3 wants photos; and whether her five outcomes become new QL POSINS_RES codes or map onto
the existing three. Drafts: scratch/halo_tickets/ticket_22387_jo_questions.md,
ticket_22387_peter_ql_asks.md.
Related¶
- how-to-edit-a-form.md — includes recovering a form record whose latest version is corrupt
- data-items-library.md — the
QLcrm_block to copy forQLpost_ - void-survey.md — the pre-inspection counterpart
- ../sessions/gotchas-and-tips.md — never hand-author
.ftpackagemetadata;extracted/filename collisions - ../deployment/dev-to-live.md