> ## Documentation Index
> Fetch the complete documentation index at: https://docs.axiomancer.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Port Authority Governance schema

> Field reference for the Port Authority Governance dataset — meetings, agenda items, claims, facts, minutes, tariffs, and leases from five major US ports.

The Port Authority Governance dataset contains structured records from five major US port authorities — Oakland, Long Beach, Los Angeles, JAXPORT, and the Port Authority of New York and New Jersey. Records cover board meetings, agenda items, minutes, tariff documents, resolutions, leases, and capital projects. Each port uses a purpose-built adapter (Legistar, Granicus, GravityView, AEM, or HTML) that normalizes records into a consistent schema for cross-port queries.

Every record inherits the full [APRS envelope](/codex/normalization-standard) (`record_id`, `chunk_id`, bitemporal fields, `confidence_score`, `provenance`) and carries the [join keys](/codex/join-keys) documented below.

**APRS profile:** `aprs.port-authority/1.0.0`

## Covered ports

| Port                      | Slug           | UNLOCODE | Governance model      | Adapter     |
| ------------------------- | -------------- | -------- | --------------------- | ----------- |
| Port of Oakland           | `oakland`      | USOAK    | Independent authority | Legistar    |
| Port of Long Beach        | `long-beach`   | USLGB    | Municipal department  | Granicus    |
| Port of Los Angeles       | `los-angeles`  | USLAX    | Municipal department  | AEM         |
| JAXPORT                   | `jacksonville` | USJAX    | Independent authority | GravityView |
| Port Authority of NY & NJ | `ny-nj`        | USNYC    | Bi-state compact      | HTML        |

All five ports have at least 12 months of meeting data. Adapters run daily; tariff snapshots update quarterly.

## Tables

The dataset is organized into multiple related tables rather than a single flat file. This structure reflects the natural hierarchy of governance records — meetings contain agenda items, which produce claims and facts.

| Table                             | Purpose                                                                           |
| --------------------------------- | --------------------------------------------------------------------------------- |
| `port_authorities`                | Dimension table. One row per port with metadata, UNLOCODE, and jurisdiction slug. |
| `port_authority_terminals`        | Per-port terminal gazetteer with H3 resolution-9 cells and alias arrays.          |
| `port_authority_meetings`         | Scheduled board meetings — one per session.                                       |
| `port_authority_agenda_items`     | Union surface (claim + fact) across all agenda items.                             |
| `port_authority_claims`           | Staff recommendations (pre-vote intent).                                          |
| `port_authority_facts`            | Board-vote outcomes (post-vote action).                                           |
| `port_authority_minutes`          | Pointer records to published minutes PDFs.                                        |
| `port_authority_resolutions`      | Adopted resolutions and ordinances.                                               |
| `port_authority_tariffs`          | Whole-document tariff version records.                                            |
| `port_authority_tariff_items`     | Line-item records with bitemporal supersession tracking.                          |
| `port_authority_leases`           | Terminal leases (available once PDF extraction ships).                            |
| `port_authority_capital_projects` | Capital infrastructure projects approved via board action.                        |

### Port authorities (dimension)

| Field               | Type   | Nullable | Description                                                                                                |
| ------------------- | ------ | :------: | ---------------------------------------------------------------------------------------------------------- |
| `port_slug`         | string |    no    | Canonical port identifier (primary key).                                                                   |
| `name`              | string |    no    | Full legal name.                                                                                           |
| `unlocode`          | string |    no    | UN/LOCODE 5-character identifier.                                                                          |
| `governance_model`  | enum   |    no    | `independent_authority`, `bi_state_compact`, or `municipal_department`.                                    |
| `jurisdiction_slug` | string |    no    | Civic jurisdiction key for cross-product joins to [Civic Intelligence](/codex/schemas/civic-intelligence). |
| `h3_port_r7`        | string |    yes   | H3 resolution-7 cell at the port's center of gravity.                                                      |
| `port_page_url`     | URL    |    yes   | Canonical port homepage.                                                                                   |

### Meetings

Board and committee meetings with scheduling, location, and document availability.

| Field               | Type   | Nullable | Description                                                              |
| ------------------- | ------ | :------: | ------------------------------------------------------------------------ |
| `port_slug`         | string |    no    | Port identifier. Foreign key to `port_authorities`.                      |
| `event_id`          | string |    no    | Source-native meeting identifier (Legistar event ID, Granicus clip ID).  |
| `event_guid`        | string |    yes   | Globally unique source identifier when available.                        |
| `body_name`         | string |    yes   | Committee or board name (e.g., "Board of Port Commissioners").           |
| `meeting_type_slug` | string |    yes   | Normalized meeting type (see [meeting type slugs](#meeting-type-slugs)). |
| `event_date`        | date   |    yes   | Scheduled meeting date.                                                  |
| `event_time`        | string |    yes   | Scheduled start time.                                                    |
| `location`          | string |    yes   | Meeting venue or "Virtual".                                              |
| `video_status`      | string |    yes   | Video availability (`available`, `pending`, `none`).                     |
| `agenda_status`     | string |    yes   | Agenda publication status (`published`, `draft`, `none`).                |
| `minutes_status`    | string |    yes   | Minutes publication status (`published`, `draft`, `none`).               |
| `agenda_file_url`   | URL    |    yes   | Direct link to agenda PDF or HTML.                                       |
| `minutes_file_url`  | URL    |    yes   | Direct link to minutes PDF or HTML.                                      |
| `media_urls`        | JSON   |    yes   | Array of video or audio recording URLs.                                  |
| `jurisdiction_slug` | string |    yes   | Civic jurisdiction identifier for cross-dataset joins.                   |

### Agenda items

Individual items from a board meeting agenda, classified by kind.

| Field             | Type    | Nullable | Description                                                                     |
| ----------------- | ------- | :------: | ------------------------------------------------------------------------------- |
| `port_slug`       | string  |    no    | Port identifier.                                                                |
| `event_id`        | string  |    no    | Parent meeting identifier.                                                      |
| `item_id`         | string  |    no    | Source-native item identifier.                                                  |
| `agenda_sequence` | integer |    yes   | Position in the agenda.                                                         |
| `agenda_number`   | string  |    yes   | Display number from the published agenda.                                       |
| `title`           | string  |    yes   | Agenda item title.                                                              |
| `kind`            | enum    |    no    | `claim` or `fact`. See [claim and fact separation](#claim-and-fact-separation). |
| `matter_id`       | string  |    yes   | Source-native matter or legislation identifier.                                 |
| `matter_type`     | string  |    yes   | Matter classification from the source system.                                   |
| `matter_status`   | string  |    yes   | Current status (`pending`, `approved`, `deferred`, `withdrawn`).                |
| `consent`         | boolean |    yes   | `true` if the item was on the consent calendar.                                 |
| `roll_call`       | JSON    |    yes   | Structured roll call vote data when available.                                  |

### Claims

Source assertions — what was proposed or recommended by staff. Claims represent the "before" side of governance actions.

| Field              | Type    | Nullable | Description                                                                     |
| ------------------ | ------- | :------: | ------------------------------------------------------------------------------- |
| `port_slug`        | string  |    no    | Port identifier.                                                                |
| `event_id`         | string  |    no    | Parent meeting identifier.                                                      |
| `item_id`          | string  |    no    | Source-native item identifier.                                                  |
| `title`            | string  |    yes   | Staff recommendation or proposal title.                                         |
| `matter_file`      | string  |    yes   | Source document reference number.                                               |
| `matter_name`      | string  |    yes   | Source-native matter name.                                                      |
| `matter_type`      | string  |    yes   | Action category (tariff change, lease action, capital project, contract award). |
| `matter_status`    | string  |    yes   | Current status.                                                                 |
| `consent`          | boolean |    yes   | Whether this appeared on the consent calendar.                                  |
| `attachments`      | JSON    |    yes   | Array of attachment URLs and metadata.                                          |
| `counterparty_urn` | string  |    yes   | Entity resolution link to the counterparty (tenant, contractor, vendor).        |

### Facts

Resolved outcomes — what the board actually decided. Facts represent the "after" side of governance actions and are currently available only for Oakland (Legistar adapter).

| Field         | Type    | Nullable | Description                                      |
| ------------- | ------- | :------: | ------------------------------------------------ |
| `port_slug`   | string  |    no    | Port identifier.                                 |
| `event_id`    | string  |    no    | Parent meeting identifier.                       |
| `item_id`     | string  |    no    | Source-native item identifier.                   |
| `action_text` | string  |    yes   | Description of the action taken by the board.    |
| `passed_flag` | boolean |    yes   | `true` if the item passed, `false` if it failed. |
| `mover`       | string  |    yes   | Name of the commissioner who moved the item.     |
| `seconder`    | string  |    yes   | Name of the commissioner who seconded.           |
| `vote_tally`  | string  |    yes   | Vote count (e.g., "7-0", "5-2").                 |

<Note>
  Fact records require vote-tally data from the source system. Currently only the Oakland Legistar adapter surfaces `passed_flag` and `vote_tally`. Fact emission for other ports will follow as minutes-PDF extraction (roll-call parsing) is added.
</Note>

### Minutes

Published meeting minutes with document links and status tracking.

| Field               | Type   | Nullable | Description                 |
| ------------------- | ------ | :------: | --------------------------- |
| `port_slug`         | string |    no    | Port identifier.            |
| `event_id`          | string |    no    | Parent meeting identifier.  |
| `body_name`         | string |    yes   | Committee or board name.    |
| `meeting_type_slug` | string |    yes   | Normalized meeting type.    |
| `minutes_pdf_url`   | URL    |    yes   | Direct link to minutes PDF. |
| `minutes_status`    | string |    yes   | Publication status.         |

### Tariffs

Port tariff documents tracked across revisions. When a new tariff version is published, Codex extracts individual line items and links them to the parent document.

| Field           | Type    | Nullable | Description                   |
| --------------- | ------- | :------: | ----------------------------- |
| `port_slug`     | string  |    no    | Port identifier.              |
| `tariff_year`   | integer |    yes   | Tariff calendar year.         |
| `version`       | string  |    yes   | Version identifier.           |
| `version_label` | string  |    yes   | Human-readable version label. |
| `filename`      | string  |    yes   | Source filename.              |
| `pdf_url`       | URL     |    yes   | Direct link to tariff PDF.    |

### Tariff items

Individual line items from tariff documents with bitemporal supersession tracking. When a rate changes between tariff versions, the old item's `superseded_by` field links to the replacement.

| Field            | Type    | Nullable | Description                                                                                                                                    |
| ---------------- | ------- | :------: | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| `port_slug`      | string  |    no    | Port identifier.                                                                                                                               |
| `schedule_no`    | string  |    yes   | Tariff schedule number.                                                                                                                        |
| `item_no`        | string  |    yes   | Line item number within the schedule.                                                                                                          |
| `description`    | string  |    yes   | Rate description.                                                                                                                              |
| `rate`           | string  |    yes   | Rate value (text to accommodate units and ranges).                                                                                             |
| `unit`           | string  |    yes   | Rate unit (per TEU, per metric ton, per day).                                                                                                  |
| `notes`          | string  |    yes   | Classification tag: `REG` (rules/regulations), `DEF` (definitions), `CHG` (fees/charges), `REG_NEW` or `CHG_NEW` (new items in this revision). |
| `effective_date` | date    |    yes   | Date the rate takes effect.                                                                                                                    |
| `superseded_by`  | string  |    yes   | `record_id` of the item that replaced this one.                                                                                                |
| `page_number`    | integer |    yes   | Source PDF page reference.                                                                                                                     |

## Tariff version tracking

Tariff items use bitemporal supersession to track rate changes across versions. When a newer tariff version lands and the diff engine matches an old item to a new one:

* The old item gets `effective_to` set to the new version's effective date
* `superseded_by` links to the replacement item's `record_id`
* `modified_at` is refreshed

Items removed in a newer version get `effective_to` set but `superseded_by` remains null.

Query rates in effect at a specific point in time:

```sql theme={null}
SELECT schedule_no, item_no, description, rate, unit
FROM port_authority_tariff_items
WHERE port_slug = 'jacksonville'
  AND effective_from <= '2025-11-01'
  AND (effective_to IS NULL OR effective_to > '2025-11-01');
```

## Claim and fact separation

Governance records use the [claim/fact layer](/codex/claim-fact-layer) to separate what was proposed from what was decided. Every agenda item is classified as either a `claim` (staff recommendation, pending proposal) or a `fact` (board decision with recorded vote). This makes it straightforward to query for approved actions versus pending proposals.

For example, a staff recommendation to approve a terminal lease appears as a claim. If the board votes to approve it, a corresponding fact record captures the vote tally and outcome. You can join claims to facts through the shared `event_id` and `item_id` keys.

## Enum values

### Governance model

| Value                   | Meaning                                                               |
| ----------------------- | --------------------------------------------------------------------- |
| `independent_authority` | Authority operates as its own legal entity (Oakland, JAXPORT)         |
| `bi_state_compact`      | Created by interstate compact (PANYNJ)                                |
| `municipal_department`  | Department of a single municipal government (Long Beach, Los Angeles) |

### Meeting type slugs

Stable URL-safe slugs derived from `body_name`:

| Slug                            | Source body name                          |
| ------------------------------- | ----------------------------------------- |
| `board-of-harbor-commissioners` | Los Angeles Board of Harbor Commissioners |
| `board-of-port-commissioners`   | Board of Port Commissioners (Oakland)     |
| `port-authority-board`          | Port Authority of NY/NJ board             |
| `harbor-commission`             | Harbor Commission (Long Beach)            |
| `audit-committee`               | Audit Committee                           |
| `board-workshop`                | Board Workshop                            |
| `board-meeting`                 | Board Meeting (JAXPORT general)           |

Unmatched body names fall back to a slugified version of the source text.

### Passed flag values

Source-supplied status string, lowercased. Values that indicate an affirmative outcome: `pass`, `passed`, `adopted`, `approved`. Values that indicate a negative outcome: `fail`, `failed`, `rejected`, `denied`. Other values are stored verbatim.

## Cross-dataset joins

The Port Authority Governance dataset joins to other Codex datasets through two paths.

### To AIS Maritime Positions

* **Port-level:** join `port_authorities.unlocode` to vessel port-call attribution in AIS Maritime. For example, UNLOCODE `USJAX` maps to all vessel calls at Jacksonville.
* **Terminal-level:** join `port_authority_terminals.h3_r9` to `ais_positions.h3_index` at H3 resolution 9. A vessel's position within a terminal's H3 cell during a port call attributes the call to that terminal, which joins to lease records for "which lessee was operating that terminal at port-call time."

### To Civic Intelligence

`port_authority_meetings.jurisdiction_slug` aligns with `civic_records.jurisdiction_slug` from the [Civic Intelligence dataset](/codex/schemas/civic-intelligence). This enables queries like "all civic actions in Oakland adjacent to port-board actions from the same jurisdiction."

### To Events Timeline

Every fact-kind agenda-item record and every adopted resolution surfaces as an [Events Timeline](/codex/schemas/events-timeline) row. The fact's `effective_from` becomes the event's `occurred_at`.

## Join keys

| Key                  |      Presence      | Notes                                                                         |
| -------------------- | :----------------: | ----------------------------------------------------------------------------- |
| `record_id`          |       always       | APRS URN                                                                      |
| `chunk_id`           |       always       | Deterministic from `record_id`                                                |
| `port_slug`          |       always       | Links to `port_authorities` dimension table                                   |
| `unlocode`           | always (dimension) | Cross-product join to AIS Maritime via port-call resolution                   |
| `event_id`           |       always       | Meeting-level key; joins meetings to agenda items, claims, facts, and minutes |
| `item_id`            |        often       | Item-level key; joins agenda items to claims and facts                        |
| `jurisdiction_slug`  |      sometimes     | Civic jurisdiction identifier for cross-dataset joins                         |
| `counterparty_urn`   |      sometimes     | Entity resolution link to tenant, contractor, or vendor                       |
| `h3_r9`              |      terminals     | H3 resolution-9 cell for terminal-level AIS joins                             |
| `source_version_urn` |    tariff items    | Foreign key to parent tariff document                                         |
| `superseded_by`      |    tariff items    | Self-referencing key across tariff versions                                   |

## Example queries

Find all approved lease actions at the Port of Oakland in the last year:

```sql theme={null}
SELECT
  f.record_id,
  f.occurred_at,
  c.title,
  c.matter_type,
  c.counterparty_urn,
  f.passed_flag,
  f.vote_tally
FROM port_authority_facts f
JOIN port_authority_claims c
  ON c.port_slug = f.port_slug
  AND c.event_id = f.event_id
  AND c.item_id = f.item_id
WHERE f.port_slug = 'oakland'
  AND c.matter_type ILIKE '%lease%'
  AND f.passed_flag = true
ORDER BY f.occurred_at DESC;
```

List all board meetings across ports with published minutes:

```sql theme={null}
SELECT
  port_slug,
  body_name,
  event_date,
  agenda_file_url,
  minutes_file_url
FROM port_authority_meetings
WHERE minutes_status = 'published'
ORDER BY event_date DESC
LIMIT 25;
```

Compare tariff rate changes between versions at a specific port:

```sql theme={null}
SELECT
  old_item.schedule_no,
  old_item.item_no,
  old_item.description,
  old_item.rate AS old_rate,
  new_item.rate AS new_rate,
  old_item.effective_date AS old_effective,
  new_item.effective_date AS new_effective
FROM port_authority_tariff_items old_item
JOIN port_authority_tariff_items new_item
  ON new_item.record_id = old_item.superseded_by
WHERE old_item.port_slug = 'jacksonville'
ORDER BY old_item.schedule_no, old_item.item_no;
```

Query rates in effect on a given date:

```sql theme={null}
SELECT schedule_no, item_no, description, rate, unit
FROM port_authority_tariff_items
WHERE port_slug = 'jacksonville'
  AND effective_from <= '2025-11-01'
  AND (effective_to IS NULL OR effective_to > '2025-11-01');
```

## Known limitations

* **Fact coverage is port-dependent.** Only the Oakland Legistar adapter currently emits fact records with vote tallies and pass/fail outcomes. Other ports will gain fact emission as minutes-PDF extraction is added.
* **Tariff items cover JAXPORT only.** The tariff parser is currently JAXPORT-shaped. PANYNJ uses a different table layout that requires a separate parser. Other ports (POLA, POLB, Oakland) negotiate pricing via leases rather than publishing item-level tariff schedules.
* **Lease and capital project tables are scaffolds.** These tables exist in the schema but are not yet populated. Records will appear once the resolution-PDF extractor ships.
* **Counterparty resolution is deferred.** `counterparty_urn` on claims and leases stays null until the corporate-registry entity resolution pipeline is available. Lessee names are stored as raw strings in the meantime.
* **Meeting dates may be missing.** The NY & NJ adapter does not currently parse event dates from document metadata, so `event_date` is null for PANYNJ meetings.
* **Adapter coverage varies.** Not all adapters surface the same fields. Granicus and HTML adapters do not provide `roll_call` or `vote_tally` data.
* **Tariff items are text-based.** The `rate` field is stored as text to accommodate varied formats (ranges, multi-part rates, conditional pricing). Parse with care when doing numeric comparisons.
* **Historical depth varies by port.** The initial backfill covers approximately one year of meetings. Older records may be added in future collection runs.
* **Undated tariff versions.** Some earlier JAXPORT tariff versions lack `effective_from`. The `superseded_by` chain is still correct, but absolute point-in-time queries against undated periods are imprecise. Use the parent tariff's `tariff_year` as a fallback.
