# Entity / status dictionary (catalog)

Reviewed **definitions only** — status meanings + field allowlists/denylists for Phase-1 business entities.

**Not** schema harvest (TW-297) and **not** Qdrant indexing (TW-299). This answers: *what do statuses mean, and which fields may tools return?*

## Layout

```
catalogs/entities/
  manifest.json              # ordered entity ids
  publisher.json
  advertiser.json
  campaign_budget.json
  publisher_caps.json
  publisher_agreement.json
  publisher_spaf.json
  types.ts / load.ts         # loader for tools / tests
```

## Rules

- No live row/PII payloads in these files
- `fieldDeny` wins over allowlist (aligns with TW-294 redaction + TW-298 sensitivity)
- Status `confirmed: false` means AdOps/DBA must still map DB codes — do not invent
- Phase-1 tool locks (must match TW-309 views / TW-313 tools): agreement = `signed` \| `missing`; SPAF = `uploaded` \| `missing`
- Mark `reviewStatus: "reviewed"` only after AdOps/privacy sign-off

## Consumers

| Consumer | Use |
| -------- | --- |
| `get_entity_definition` (planned) | Return definition by id/alias |
| MNGT RO tools (TW-311–313) | Allowlist / deny for response shaping |
| TW-309 DBA views | Column notes for RO projections |
| Future catalog index | Optional: embed definition text into `lucos_business_catalog` |

## Load in code

```ts
import { findEntityDefinition, loadAllEntityDefinitions } from './load.js';

const defs = loadAllEntityDefinitions();
const pub = findEntityDefinition('affiliate');
```

## Refs

- Ticket: [TW-327](https://admedia-jira.atlassian.net/browse/TW-327) (parent [TW-285](https://admedia-jira.atlassian.net/browse/TW-285))
- MNGT RO views: [TW-309](https://admedia-jira.atlassian.net/browse/TW-309)
- Publisher onboarding gates: [Publisher Onboarding and Launch SOP](https://admedia-jira.atlassian.net/wiki/spaces/PM1/pages/758743051/Publisher+Onboarding+and+Launch+SOP)
