From 6c971b3405e844e2f40c60289c2e35b9dbabf113 Mon Sep 17 00:00:00 2001 From: Daniel Roth Date: Mon, 27 Jul 2026 11:28:39 +0000 Subject: [PATCH] =?UTF-8?q?Name=20the=20void-property=20outcome=20in=20the?= =?UTF-8?q?=20glossary=20and=20ops=20guide=20=F0=9F=9F=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5 (1M context) --- CONTEXT.md | 4 ++++ docs/abri-hubspot-ops-guide.md | 8 +++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/CONTEXT.md b/CONTEXT.md index c7c435926..ad8344d10 100644 --- a/CONTEXT.md +++ b/CONTEXT.md @@ -472,6 +472,10 @@ _Avoid_: new API, current API The auth credential required by the New EPC API; stored in the `EPC_AUTH_TOKEN` environment variable. _Avoid_: API key, auth token, secret +**Void Property**: +A place Abri reports as having no live tenancy, signalled by `getSCSTenantData` returning a `RelayError` whose message is exactly `No_tenancy_found`. A normal outcome of the tenant-data sync, not a failure: there are no signatories to create as deal contacts, so the flow completes and notes the deal instead of dead-lettering the message. Distinct from a tenancy carrying no tenants (a tenancy exists; nobody is recorded against it), and from the same words arriving as a dumped 4GL query (`No Tenancy Found for Query FOR EACH ...`), which stays a rejection — Abri does not send that form to mean "known empty". +_Avoid_: empty property, no tenancy (names the message, not the state), untenanted + ## Team Who's who on the project, so commit authorship and review history read diff --git a/docs/abri-hubspot-ops-guide.md b/docs/abri-hubspot-ops-guide.md index d307854fb..21ea821cb 100644 --- a/docs/abri-hubspot-ops-guide.md +++ b/docs/abri-hubspot-ops-guide.md @@ -26,7 +26,7 @@ counts. | When you… | Abri's system… | How you know it worked | |---|---|---| -| Set **Expected commencement date** for the first time | Sends us the tenancy details for the property | Tenant contact records appear in HubSpot, linked to the deal | +| Set **Expected commencement date** for the first time | Sends us the tenancy details for the property | Tenant contact records appear in HubSpot, linked to the deal — unless Abri reports the property as empty (see below) | | Set **Confirmed survey date** for the first time | Creates the survey booking (a "job") against the property, assigned to the surveyor on the deal | Abri's job number appears in **Client booking reference** on the deal | | Change **Confirmed survey date**, **Confirmed survey time** or **Third-party surveyor identifier** on a deal that already has a booking | Updates the existing appointment — new date/time and/or reassigns it to the new surveyor | The deal keeps the same Client booking reference | | Record a **3rd attempt** (Number of attempts reaches 3) **and** set **Outcome** to an unsuccessful value (see below) | Cancels the booking as abandoned | — (this only fires once per deal) | @@ -41,6 +41,12 @@ counts. Any other outcome (or fewer than 3 attempts) does **not** cancel anything in Abri's system. +**Empty properties.** If Abri has no live tenancy for the property, no tenant contacts +appear on the deal — there is nobody to add. This is expected, not a fault, and nothing +needs re-triggering. Note that Abri sends the same signal for a property reference it +does not recognise, so if you were expecting tenants, check the property is right before +assuming it's empty. + ## The fields, and why they matter | HubSpot deal field | What it feeds |