GCC Build OSv0
/api

TenantTenant

retention: reference

A client engagement. Top-level isolation boundary for all per-tenant data (I1).

RACI requirements

decision_maker
n/a
approver
n/a
reviewer
n/a
contributor
n/a
informed
n/a

JSON Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://gcc.bootminds.com/ontology/node-types/tenant.json",
  "title": "Tenant",
  "description": "A client engagement. Top-level isolation boundary for all per-tenant data (I1).",
  "type": "object",
  "x-node-type": "Tenant",
  "x-lifecycle-state-machine": null,
  "x-raci-requirements": {
    "decision_maker": "n/a",
    "approver": "n/a",
    "reviewer": "n/a",
    "contributor": "n/a",
    "informed": "n/a"
  },
  "x-retention-class": "reference",
  "required": [
    "node_id",
    "node_type",
    "tenant_id",
    "attributes",
    "state",
    "created_at",
    "created_by"
  ],
  "properties": {
    "node_id": {
      "type": "string",
      "format": "uuid"
    },
    "node_type": {
      "const": "Tenant"
    },
    "tenant_id": {
      "type": "string",
      "format": "uuid",
      "description": "For a Tenant node, tenant_id equals node_id (self-reference). Enforced by I1 multi-tenant isolation."
    },
    "state": {
      "type": "string",
      "enum": [
        "active",
        "suspended",
        "archived"
      ],
      "description": "Coarse operational state of the tenant engagement. Not a formal lifecycle state machine."
    },
    "attributes": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "name",
        "industry",
        "primary_region",
        "engagement_stage",
        "opted_in_to_cross_tenant_patterns",
        "data_classification_scheme_version"
      ],
      "properties": {
        "name": {
          "type": "string",
          "minLength": 1,
          "description": "Display name of the client engagement (e.g., 'Alghiaz Group')."
        },
        "industry": {
          "type": "string",
          "minLength": 1,
          "description": "Industry tag used for anonymised cross-tenant pattern aggregation (Phase 3). Free-text in Phase 0; expected canonical values include 'construction_and_engineering', 'financial_services', 'retail', 'manufacturing', 'healthcare'."
        },
        "primary_region": {
          "type": "string",
          "minLength": 2,
          "description": "Primary geographic region of operations (e.g., 'KSA', 'UAE', 'IN'). Free-text ISO-style codes for now; canonical enum to be promoted post-Phase-0."
        },
        "engagement_stage": {
          "type": "string",
          "enum": [
            "prospect",
            "discovery",
            "design",
            "build",
            "transition",
            "in_service",
            "concluded"
          ],
          "description": "Coarse engagement-lifecycle phase. Independent of the per-object state machines."
        },
        "opted_in_to_cross_tenant_patterns": {
          "type": "boolean",
          "description": "Q9: whether this tenant has opted into anonymised cross-tenant pattern detection (Phase 3, k-anonymity >= 5)."
        },
        "data_classification_scheme_version": {
          "type": "string",
          "minLength": 1,
          "description": "Q1: version of the 4-tier classification scheme in force for this tenant (e.g., 'v1-4tier'). Will bump when PDPL alignment lands in Phase 1B."
        },
        "primary_pdpl_region": {
          "type": [
            "string",
            "null"
          ],
          "description": "PDPL/regulatory region key relevant to this tenant (e.g., 'KSA-PDPL'). Nullable in Phase 1A; populated when PDPL alignment lands in Phase 1B."
        }
      }
    },
    "created_at": {
      "type": "string",
      "format": "date-time"
    },
    "created_by": {
      "type": "string",
      "format": "uuid"
    },
    "updated_at": {
      "type": "string",
      "format": "date-time"
    }
  }
}