{
  "schemaVersion": 1,
  "domain": "telecom",
  "city": "nairobi",
  "citizenId": "2737098",
  "recordCount": 33,
  "source": {
    "path": "assets/data/citizens/source-records/nairobi-2737098-telecom-complete.json",
    "sha256": "33fce007237e5ea12357531dae9179e19302a21a2cf4c9ca9ed1911db15d4198",
    "tablePointer": "/tables/telecomEvents",
    "asOf": "2026-09-01"
  },
  "scope": "7 milestones from 33 supplied events across 7 telecom areas.",
  "rawFields": [
    {
      "key": "CitizenId",
      "name": "CitizenId",
      "type": "source text or null",
      "description": "Exact supplied subscription/timeline value; SQL NULL becomes an empty CSV field."
    },
    {
      "key": "ResidentName",
      "name": "ResidentName",
      "type": "source text or null",
      "description": "Exact supplied subscription/timeline value; SQL NULL becomes an empty CSV field."
    },
    {
      "key": "DOB",
      "name": "DOB",
      "type": "source text or null",
      "description": "Exact supplied subscription/timeline value; SQL NULL becomes an empty CSV field."
    },
    {
      "key": "Age",
      "name": "Age",
      "type": "source text or null",
      "description": "Exact supplied subscription/timeline value; SQL NULL becomes an empty CSV field."
    },
    {
      "key": "Gender",
      "name": "Gender",
      "type": "source text or null",
      "description": "Exact supplied subscription/timeline value; SQL NULL becomes an empty CSV field."
    },
    {
      "key": "ResidencyStatus",
      "name": "ResidencyStatus",
      "type": "source text or null",
      "description": "Exact supplied subscription/timeline value; SQL NULL becomes an empty CSV field."
    },
    {
      "key": "SubscriberId",
      "name": "SubscriberId",
      "type": "source text or null",
      "description": "Exact supplied subscription/timeline value; SQL NULL becomes an empty CSV field."
    },
    {
      "key": "MSISDN",
      "name": "MSISDN",
      "type": "source text or null",
      "description": "Exact supplied subscription/timeline value; SQL NULL becomes an empty CSV field."
    },
    {
      "key": "HolderCitizenId",
      "name": "HolderCitizenId",
      "type": "source text or null",
      "description": "Exact supplied subscription/timeline value; SQL NULL becomes an empty CSV field."
    },
    {
      "key": "HolderRelationship",
      "name": "HolderRelationship",
      "type": "source text or null",
      "description": "Exact supplied subscription/timeline value; SQL NULL becomes an empty CSV field."
    },
    {
      "key": "HolderName",
      "name": "HolderName",
      "type": "source text or null",
      "description": "Exact supplied subscription/timeline value; SQL NULL becomes an empty CSV field."
    },
    {
      "key": "SnapshotAsOfDate",
      "name": "SnapshotAsOfDate",
      "type": "source text or null",
      "description": "Exact supplied subscription/timeline value; SQL NULL becomes an empty CSV field."
    },
    {
      "key": "Operator",
      "name": "Operator",
      "type": "source text or null",
      "description": "Exact supplied subscription/timeline value; SQL NULL becomes an empty CSV field."
    },
    {
      "key": "AccountType",
      "name": "AccountType",
      "type": "source text or null",
      "description": "Exact supplied subscription/timeline value; SQL NULL becomes an empty CSV field."
    },
    {
      "key": "DataPlanTier",
      "name": "DataPlanTier",
      "type": "source text or null",
      "description": "Exact supplied subscription/timeline value; SQL NULL becomes an empty CSV field."
    },
    {
      "key": "SubscriberStatus",
      "name": "SubscriberStatus",
      "type": "source text or null",
      "description": "Exact supplied subscription/timeline value; SQL NULL becomes an empty CSV field."
    },
    {
      "key": "WardId",
      "name": "WardId",
      "type": "source text or null",
      "description": "Exact supplied subscription/timeline value; SQL NULL becomes an empty CSV field."
    },
    {
      "key": "ActivationDate",
      "name": "ActivationDate",
      "type": "source text or null",
      "description": "Exact supplied subscription/timeline value; SQL NULL becomes an empty CSV field."
    },
    {
      "key": "DeactivationDate",
      "name": "DeactivationDate",
      "type": "source text or null",
      "description": "Exact supplied subscription/timeline value; SQL NULL becomes an empty CSV field."
    },
    {
      "key": "StatusRecords",
      "name": "StatusRecords",
      "type": "source text or null",
      "description": "Exact supplied subscription/timeline value; SQL NULL becomes an empty CSV field."
    },
    {
      "key": "SIMEpisodes",
      "name": "SIMEpisodes",
      "type": "source text or null",
      "description": "Exact supplied subscription/timeline value; SQL NULL becomes an empty CSV field."
    },
    {
      "key": "DeviceEpisodes",
      "name": "DeviceEpisodes",
      "type": "source text or null",
      "description": "Exact supplied subscription/timeline value; SQL NULL becomes an empty CSV field."
    },
    {
      "key": "TariffEpisodes",
      "name": "TariffEpisodes",
      "type": "source text or null",
      "description": "Exact supplied subscription/timeline value; SQL NULL becomes an empty CSV field."
    },
    {
      "key": "UsageMonths",
      "name": "UsageMonths",
      "type": "source text or null",
      "description": "Exact supplied subscription/timeline value; SQL NULL becomes an empty CSV field."
    },
    {
      "key": "AirtimeTopUps",
      "name": "AirtimeTopUps",
      "type": "source text or null",
      "description": "Exact supplied subscription/timeline value; SQL NULL becomes an empty CSV field."
    },
    {
      "key": "DataBundlePurchases",
      "name": "DataBundlePurchases",
      "type": "source text or null",
      "description": "Exact supplied subscription/timeline value; SQL NULL becomes an empty CSV field."
    },
    {
      "key": "MobilityTrips",
      "name": "MobilityTrips",
      "type": "source text or null",
      "description": "Exact supplied subscription/timeline value; SQL NULL becomes an empty CSV field."
    },
    {
      "key": "ServiceComplaints",
      "name": "ServiceComplaints",
      "type": "source text or null",
      "description": "Exact supplied subscription/timeline value; SQL NULL becomes an empty CSV field."
    },
    {
      "key": "TimelineOrder",
      "name": "TimelineOrder",
      "type": "source text or null",
      "description": "Exact supplied subscription/timeline value; SQL NULL becomes an empty CSV field."
    },
    {
      "key": "EventDate",
      "name": "EventDate",
      "type": "source text or null",
      "description": "Exact supplied subscription/timeline value; SQL NULL becomes an empty CSV field."
    },
    {
      "key": "AgeAtEvent",
      "name": "AgeAtEvent",
      "type": "source text or null",
      "description": "Exact supplied subscription/timeline value; SQL NULL becomes an empty CSV field."
    },
    {
      "key": "Domain",
      "name": "Domain",
      "type": "source text or null",
      "description": "Exact supplied subscription/timeline value; SQL NULL becomes an empty CSV field."
    },
    {
      "key": "Event",
      "name": "Event",
      "type": "source text or null",
      "description": "Exact supplied subscription/timeline value; SQL NULL becomes an empty CSV field."
    },
    {
      "key": "Details",
      "name": "Details",
      "type": "source text or null",
      "description": "Exact supplied subscription/timeline value; SQL NULL becomes an empty CSV field."
    },
    {
      "key": "AmountLocal",
      "name": "AmountLocal",
      "type": "source text or null",
      "description": "Exact supplied subscription/timeline value; SQL NULL becomes an empty CSV field."
    },
    {
      "key": "AmountMeaning",
      "name": "AmountMeaning",
      "type": "source text or null",
      "description": "Exact supplied subscription/timeline value; SQL NULL becomes an empty CSV field."
    },
    {
      "key": "SourceTable",
      "name": "SourceTable",
      "type": "source text or null",
      "description": "Exact supplied subscription/timeline value; SQL NULL becomes an empty CSV field."
    },
    {
      "key": "SourceRecordId",
      "name": "SourceRecordId",
      "type": "source text or null",
      "description": "Exact supplied subscription/timeline value; SQL NULL becomes an empty CSV field."
    }
  ],
  "displayFields": [
    {
      "key": "date",
      "label": "Date / period",
      "format": "record-date"
    },
    {
      "key": "event",
      "label": "Event"
    },
    {
      "key": "details",
      "label": "Details"
    }
  ],
  "derivedFields": [
    {
      "name": "publicDetails",
      "description": "Display codes are capitalized for reading, the redundant bundle operator prefix is omitted, and mobility kilometres are shown to one decimal. Exact source values remain in raw records and CSV."
    },
    {
      "name": "datePrecision",
      "description": "MonthlyUsageSummary rows display month and year without changing EventDate."
    },
    {
      "name": "SIM & device activated",
      "description": "The SIM milestone links the separate device-acquired source row on the same date."
    }
  ],
  "hiddenDisplayFields": [
    "MSISDN"
  ],
  "downloadHref": "/downloads/citizens/nairobi-2737098-telecom.csv",
  "tables": [
    {
      "name": "subscription",
      "recordCount": 1,
      "sourcePointer": "/tables/subscription"
    },
    {
      "name": "telecomTimeline",
      "recordCount": 33,
      "sourcePointer": "/tables/telecomTimeline"
    },
    {
      "name": "telecomSummary",
      "recordCount": 1,
      "sourcePointer": "/tables/telecomSummary"
    },
    {
      "name": "featuredCandidates",
      "recordCount": 9,
      "sourcePointer": "/tables/featuredCandidates"
    }
  ],
  "csvJoin": {
    "subscriptionPointer": "/tables/subscription/rows/0/values",
    "timelinePointer": "/tables/telecomTimeline/rows",
    "keys": [
      "CitizenId",
      "SubscriberId"
    ],
    "fieldCount": 38
  },
  "missingFields": [
    "Exact timestamps within monthly usage buckets are not supplied. Same-day top-ups do not establish that they funded the bundle purchases."
  ]
}
