Skip to content

Companies

A company is an organisation that turns up on schemes (as developer, owner, operator), investment events (as investor or vendor), occupier events (as occupier), and portfolios (across all of the above). The directory is small in rule count — really just a name, an optional company number, an optional URL, and an optional company type — but every other record borrows the directory by linking to companies.

Save is only enabled once you’ve changed something.

FieldRequired whenWhat you see if missing
Company NameAlways”Company name is required.”

The form rejects names longer than 255 characters with “Company name must be 255 characters or fewer.” Empty or whitespace-only names are rejected as missing.

URL must be a valid URL (and max 255 characters)

Section titled “URL must be a valid URL (and max 255 characters)”

The URL field is optional, but if you enter something it must be a valid URL — otherwise you’ll see “Must be a valid URL.” The 255-character cap applies on top.

The Company Number is free-form text (different jurisdictions use different formats — Companies House registration numbers, EIN, etc.) capped at 255 characters.

Where this lives: src/services/web/src/lib/validation/company.ts.

Closed date appears when “Is Closed” is ticked

Section titled “Closed date appears when “Is Closed” is ticked”

Ticking Is Closed? reveals a Closed Date field.

The Country dropdown supports type-to-filter, like on Addresses. Typing narrows the list, arrows move the highlight, Enter selects.

When picking a Parent Company, the search results exclude the company being edited. You can’t make a company its own parent.

Section titled “Address picker links to an existing address”

The company’s Address is picked from the existing Addresses directory rather than typed inline. If the address you need doesn’t exist, create it from Addresses first.

Company name must be present (non-empty after trimming).

The save carries the RowVersion of the company you loaded. If another user has updated it since, you get a concurrency error. See Concurrent edits.

  • A CompanyCreated or CompanyUpdated event fires.
  • The company’s row in the CompanyList query view is upserted so list pages and search reflect the change.
  • An audit log entry records the change.

The score weights:

  • Company Name (already required)
  • URL
  • Company Number
  • Address
  • Country
  • Company Type
  • Offer Score (an internal sales-funnel signal)
  • Is Verified flag

See Completeness score.

The directory itself doesn’t enforce role rules — those live on the records that reference the company. For a complete picture of what a company can be tagged as:

  • On a scheme — Developer, Owner, Operator, Investor, etc. The “at least one company” requirement on a non-Hotel scheme excludes Operator roles; on a Hotel scheme it counts every role. See Schemes → Building type drives the Companies rule.
  • On an investment event — Investor, Vendor, plus their Agent variants. Investor and Vendor support an Unknown placeholder; only Investor carries a Share %. See Investment Events.
  • On a portfolio — investors, vendors, and other roles. Share % appears only under Share ownership. See Portfolios.
  • On an occupier event — the occupier company itself (or marked Unknown). See Occupier Events.
  • Frontend validation: src/services/web/src/lib/validation/company.ts
  • Edit form: src/services/web/src/lib/components/panels/CompanyEdit.svelte
  • Model: src/common/models/Models/Company.cs
  • Command handlers: src/services/api/app/app.api/Handlers/Commands/Companies/
  • Search service: src/services/api/app/app.api/Services/Search/CompanySearchService.cs
  • List-view mapper: src/common/models/Services/QueryViews/CompanyListViewMapper.cs