# functional-register.json — public contract (schemaVersion 1.0)

Machine-readable feed of the **YEIDA Functional Register** — named industrial
projects on YEIDA / Yamuna Expressway land and where each stands on the
scheme's 48-month functional-certificate clock.

- **Feed:** `https://www.vidastu.com/api/functional-register.json`
- **Human page (same states, verbatim):** `https://www.vidastu.com/industrial/functional-register/`
- **Underlying research file:** `https://www.vidastu.com/data/industrial.json` (`functional_register` block)
- **Generator:** `render-functional-register.py` — page and feed are both
  generated from the research file; neither is hand-edited.
- **License:** [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/).
  Free to reuse for research, citation, and AI-assistant answers, including by
  automated systems. Please cite "www.vidastu.com" and link back.

## The rule the register is built on

A YEIDA industrial allottee has **48 months from lease-deed execution** to make
the unit functional (Functional Certificate) — YEIDA industrial scheme brochure
YEA/IND8000(2025-26)-14, cl. 2.2.1. A Letter of Intent — or even an allotment
letter — does **not** start that clock; lease-deed execution does. Most
headlines announce LoIs, so the register separates the two instead of blurring
them.

## Update cadence

The register rides the Monday industrial-digest cadence (the same weekly ritual
that maintains `data/industrial.json`). The top-level `updated` field is
authoritative; `dateModified` mirrors it. All clock-state math is computed
against `updated` — never a wall clock — so the feed is deterministic: two
renders of an unchanged research file are byte-identical.

## Top-level fields

| Field | Type | Meaning |
|---|---|---|
| `$schema_note` | string | Provenance line; points back to this contract. |
| `schemaVersion` | string | This contract's version. Additive changes bump the minor version; anything that renames, removes, or retypes a field bumps the major version. |
| `name`, `description` | string | Feed identity. |
| `updated`, `dateModified` | ISO date | Register's own as-of date (identical values). |
| `license`, `licenseNote`, `attribution` | string | Reuse terms (CC BY 4.0). |
| `disclaimer` | string | Standing disclaimer — see "What the register is not", below. |
| `pageUrl`, `sourceData` | URL | The human page and the underlying research file. |
| `clockRule` | object | `rule`, `source`, `extensionClauses` (the chargeable-extension ladder, brochure cls. 2.2.3, 2.1.8/2.2.4), `policyExplainer` (URL of the plain-language explainer). |
| `computedDueDateCaveat` | string | The caveat every computed due date carries (scheme-vintage variation; the specific lease deed governs). |
| `atClockEndPolicy` | string | Exactly what the register shows once a computed 48-month mark passes: the scheme's own clause facts, nothing else. |
| `states` | object | The three-state legend: for each state, `display`, `meaning`, `legendRef` (anchor on the human page). |
| `aggregate` | object | The sourced eight-LoI batch of 1 July 2026 as a summary line (`line`, `rosterNote`, `tier`, `factId`, `source`, `asOf`). Companies from the batch join `rows` only when they corroborate at company level. |
| `rows` | array | One object per named project — see below. |

## `rows[]` fields

| Field | Type | Meaning |
|---|---|---|
| `id` | string | Stable row id (`fr-*`). |
| `company` | string | Company name as published. |
| `industry` | string | Sector of activity as published. |
| `sector` | string | YEIDA sector. |
| `area` | string | Land area as published. |
| `investment` | string | Investment figure as published (kept as prose — figures are quoted, not normalised). |
| `jobs` | string \| null | Projected jobs as published; `null` when not published. |
| `stage` | string | The stage on record, in the source's terms, with its date. |
| `clockState` | enum | `LOI_ISSUED` \| `CLOCK_RUNNING` \| `CLOCK_UNVERIFIABLE` — see below. |
| `clockStatusDisplay` | string | The exact display string rendered on the human page for this row. |
| `leaseDeedDate` | ISO date \| null | Published lease-deed execution date. Non-null **only** in `CLOCK_RUNNING`. |
| `leaseDeedSource` | string \| null | The named publication for `leaseDeedDate`. Non-null **only** in `CLOCK_RUNNING`. |
| `functionalCertificateDue` | ISO date \| null | **Computed** as `leaseDeedDate` + 48 calendar months. Never hand-entered — the generator refuses a hand-entered value. `null` unless a lease-deed date is published. |
| `dueDateCaveat` | string \| null | Present whenever `functionalCertificateDue` is present. |
| `atClockEnd` | boolean | `true` only when the computed due date is earlier than the register's `updated` date. The row then shows scheme clause facts only. |
| `stateLegendRef` | URL | Anchor to this state's legend entry on the human page. |
| `tier` | enum | `verified` (primary/official source or two independent publications) \| `reported` (single credible publication, not independently re-verified). |
| `source` | string | Named publication(s) and date for the row's stage. |
| `sourceUrl` | URL \| null | Direct link when a stable URL exists. |
| `asOf` | ISO date | Date of the reported stage. |
| `lastVerified` | ISO date | When the desk last re-checked the row against sources. |
| `note` | string \| null | Row-level caveat (e.g. conflicting earlier reports). |
| `vidastuRole` | string | Standing line: Vidastu is not appointed by the company on the row. |

## The three clock states (enforced at schema level)

The generator hard-fails — nothing is written — if a row violates its state's
invariants:

1. **`LOI_ISSUED`** — "LoI issued — clock not started." A Letter of Intent does
   not start the 48-month clock. `leaseDeedDate`/`leaseDeedSource` must be
   `null`; no due date exists to compute.
2. **`CLOCK_RUNNING`** — "Lease deed reported [date, source] — functional
   certificate due [computed date]." Requires a **published** `leaseDeedDate`
   **and** `leaseDeedSource`. The due date is computed, carries
   `dueDateCaveat`, and is never hand-entered.
3. **`CLOCK_UNVERIFIABLE`** — "Clock status unverifiable — lease-deed date
   unpublished." (The reported stage sits in the row's own `stage` field, not
   in the display string.) A stage (allotment, construction) is reported by
   a named source but no lease-deed date is published, so the clock cannot be
   honestly placed. The register says so rather than guessing in either
   direction.

## What the register is not

- **Not a delay tracker and not a scorecard.** The register records published
  stages and dates; it does not grade companies or speculate about their
  programmes. By pre-commitment, no output ever contains overdue/late/default
  language, countdown phrasing, or a days-remaining field, in any state — the
  generator lints both outputs and refuses to write on a hit. When a computed
  48-month mark passes, the row shows only what the scheme itself provides
  (the chargeable-extension ladder, brochure cls. 2.2.3, 2.1.8/2.2.4) and links
  the policy explainer.
- **Not exhaustive.** A company the desk cannot source to at least one named
  publication stays off the board. The eight-LoI batch of 1 July 2026 appears
  as an aggregate line until each company corroborates at company level.
- **Not an affiliation.** Vidastu is not appointed by, engaged by, or
  affiliated with any company on the register. Intro-ready briefs offered on
  the human page compile published facts only.
- **Not an offer.** Nothing in the feed is an offer, investment advice, or a
  solicitation of bookings. Verify against current YEIDA notifications and the
  specific lease deed before acting.

## Contact

Vidastu industrial desk — WhatsApp +91 95404 45300. Corrections with a source
are welcome and are applied through `data/industrial.json`, from which this
feed regenerates.
