Tenant: { id, name, primary_contact, platform_id(immutable after set), created_at, status }
BoQ: { id, tenant_id, total, currency, state, payment_state, created_at }
Facility: { id, tenant_id, name, address, tz, lat, lng, status, onboarding_owner_id, mapPin(lat,lng from BoQ) }
Asset: { id, tenant_id, facility_id, parent_id?, level(Facility|Location|Space|Subspace), name, type }
Device: { id, tenant_id, facility_id, asset_id, platform_id, connection_type(pull|webhook), device_id, external_id, metadata, last_reading_at }
Subscription: { id, tenant_id, facility_id, plan_id, status(Active|Trialing|PastDue|Canceled), renew_at, invoice_url }
Request: { id, tenant_id, submitted_by, description, created_at }
Validation: device_id unique within tenant; charset letters/digits/"-"/"_"/"."; platform_id must equal tenant.platform_id; Single IoT platform per tenant (hard‑lock)