Files
Stirling-PDF/frontend/shared/data/endpoints.ts
T
919f0ade99 Portal (#6391)
# Description of Changes

## What & why

This PR introduces the **Stirling developer portal** — a new
control-plane frontend that sits alongside the existing PDF editor —
plus the shared design system and workspace structure needed to host
both apps in one frontend.

The portal is the parent product surface: where users connect sources,
compose pipelines, wire agents, and manage usage / billing /
infrastructure, with the PDF editor as one capability inside it. This PR
lays the **foundation** — workspace reshape, design system, app shell,
navigation, and a mock-driven home — rather than wiring real backends
(those surfaces are placeholders for follow-up phases).

## What's in this PR

**1. Frontend repo reshape (`frontend/src/` → `frontend/editor/`)**
The existing editor app moved under `frontend/editor/`, so `editor`,
`portal`, and `shared` are siblings in one workspace. All references
were updated accordingly: `LICENSE`, `.dockerignore`, `.gitignore`,
build/sign shell scripts, the GH language-check script, the Taskfile,
and Docker config. **No editor source logic changed — path references
only.**

**2. New shared design system (`frontend/shared/`)**
- **Design tokens** in `tokens.css` as the single runtime source of
truth (light/dark, category accents, gradients). `tokens.ts` now holds
only the `Tier` type — the old JS palette mirror was removed (nothing
consumed it and it had drifted).
- ~30 framework-light **components** (Card, Button, Input, Select, Tabs,
Modal, Drawer, Toast, MetricCard, StatusBadge, Skeleton, EmptyState, …)
with Storybook stories.
- **Typed data catalogues**: `endpoints.ts` (10 verticals / 64
endpoints) and `ops.ts`.

**3. New developer portal app (`frontend/portal/`)**
- App shell: `Header`, `Sidebar`, `AssistantPanel`, search modal,
notifications, tier switcher, theme toggle, MSW toggle.
- **Tier-aware** home (free / pay-as-you-go / enterprise): KPI strip,
30-day usage chart, onboarding checklist, quick actions, recent
activity, region health, product grid, and a curated **"Popular use
cases"** teaser.
- **Documents** view hosting the full, tab-filterable endpoint
catalogue.
- Placeholder views for Sources / Pipelines / Agents / Editor /
Infrastructure / Usage & Billing / Developer Docs / Settings (follow-up
phases).
- **MSW-mocked** API layer: `api/*` issues real `fetch`, intercepted by
mocks in dev/Storybook; pointing at a real backend is just a matter of
not registering MSW. `react-router` URLs; Tier / View / UI contexts.

**4. Tooling & guardrails**
- ESLint extended to `portal` + `shared`, with **layering-boundary
rules**: `shared/` may depend only on third-party packages and itself
(no `@app` / `@portal` / `@core` / `@proprietary` / Tauri), so it stays
cleanly extractable into a standalone package later.
- `dpdm` circular-dependency check now walks editor + portal + shared
(the old glob matched only 2 files).
- New **devDependencies only** — Storybook (+ a11y/docs/themes addons),
MSW. No runtime dependencies added.
- New tasks: `frontend:dev:portal`, `frontend:build:portal`.

## Testing done locally

- `tsc` for both `portal` and `shared` projects — clean
- `eslint --max-warnings=0` across the whole frontend — clean
- `dpdm` circular-dependency check — no cycles
- Editor builds clean: `vite build editor --mode core` (✓ built, only
the pre-existing >500 kB chunk-size advisory)
- Editor runs in dev (core mode) with **zero console errors**; portal
runs in dev across all three tiers

## Notes for reviewers

- The change is overwhelmingly **additive**: `shared/` and `portal/` are
brand-new; the existing editor is path-reference changes only.
- The portal is intentionally **mock-driven** at this stage — real
backends and the remaining views land in follow-up phases.

---

## Checklist

### General

- [ ] I have read the [Contribution
Guidelines](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/CONTRIBUTING.md)
- [ ] I have read the [Stirling-PDF Developer
Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/DeveloperGuide.md)
(if applicable)
- [ ] I have read the [How to add new languages to
Stirling-PDF](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/HowToAddNewLanguage.md)
(if applicable)
- [x] I have performed a self-review of my own code
- [x] My changes generate no new warnings

### Documentation

- [ ] I have updated relevant docs on [Stirling-PDF's doc
repo](https://github.com/Stirling-Tools/Stirling-Tools.github.io/blob/main/docs/)
(if functionality has heavily changed)
- [ ] I have read the section [Add New Translation
Tags](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/HowToAddNewLanguage.md#add-new-translation-tags)
(for new translation tags only)

### Translations (if applicable)

- [ ] I ran
[`scripts/counter_translation.py`](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/docs/counter_translation.md)

### UI Changes (if applicable)

- [ ] Screenshots or videos demonstrating the UI changes are attached
(e.g., as comments or direct attachments in the PR)

### Testing (if applicable)

- [ ] I have run `task check` to verify linters, typechecks, and tests
pass
- [x] I have tested my changes locally. Refer to the [Testing
Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/DeveloperGuide.md#7-testing)
for more details.

---------

Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-02 16:08:24 +00:00

1271 lines
36 KiB
TypeScript

/**
* The Stirling endpoint catalogue.
*
* Document types are grouped by vertical (Insurance, Finance, Legal, …).
* Each entry carries the route path, tier gate, JSON-shape schema, supported
* regions, and a category accent. The catalogue is the spine the Docs view,
* the Pipelines composer, and the Document type grid on Home all read from.
*
* Ported faithfully from the prototype's DOCUMENT_TYPES. Schema field shapes
* are kept as the prototype-style "type-or-list-of-type" string for now; a
* future revision should convert them to Zod schemas so they double as
* runtime validators.
*/
import type { Tier } from "@shared/tokens/tokens";
/** Canonical vertical keys — these map 1:1 to category-accent CSS variables. */
export type VerticalKey =
| "insurance"
| "compliance"
| "finance"
| "legal"
| "healthcare"
| "government"
| "operations"
| "hr"
| "realestate"
| "energy";
/**
* Numeric tier requirement on an endpoint.
* 0 = free
* 1 = paid (pro / pay-as-you-go and above)
* 2 = enterprise only
*
* Use `isEndpointAvailable(endpoint, currentTier)` for runtime checks rather
* than comparing numbers directly.
*/
export type EndpointTierGate = 0 | 1 | 2;
export interface EndpointSchema {
/**
* Prototype-style field shape. Strings like "string", "number", "date",
* "boolean", "string?" (optional), "[string]" (array), or an inline shape
* "{start, end}". Replace with a Zod schema when wiring up real requests.
*/
[field: string]: string;
}
export interface Endpoint {
/** Display name shown in cards and docs. */
name: string;
/** Route path mounted under the Stirling API. */
endpoint: string;
/** Numeric tier gate, see {@link EndpointTierGate}. */
tier: EndpointTierGate;
/** One-line description used in cards and docs index. */
desc: string;
/** Vertical this endpoint belongs to. */
vertical: VerticalKey;
/** Region availability list. "+22" tail means "and N more regions". */
regions: readonly string[];
/** Endpoint payload shape. */
schema: EndpointSchema;
}
export interface Vertical {
key: VerticalKey;
label: string;
/** CSS-variable reference for the category accent. */
color: string;
endpoints: readonly Endpoint[];
}
/* ──────────────────────────────────────────────────────────────────────── */
/* Catalogue */
/* ──────────────────────────────────────────────────────────────────────── */
const insurance: readonly Endpoint[] = [
{
name: "Certificates of Insurance",
endpoint: "/v1/coi",
tier: 1,
vertical: "insurance",
desc: "Live compliance dashboard with coverage gaps, renewal alerts, and AI Q&A for policy verification",
regions: ["US", "UK", "CA", "AU", "+22"],
schema: {
holder: "string",
insurer: "string",
policy_number: "string",
coverage_types: "[string]",
general_aggregate: "number",
expiry_date: "date",
additional_insured: "boolean",
},
},
{
name: "Loss Run Reports",
endpoint: "/v1/loss-run",
tier: 1,
vertical: "insurance",
desc: "Claims timeline with loss ratio trends, carrier comparisons, and underwriting AI chat",
regions: ["US", "UK", "CA"],
schema: {
carrier: "string",
policy_period: "string",
total_claims: "number",
total_incurred: "number",
loss_ratio: "number",
claims: "[{date, type, incurred, status}]",
},
},
{
name: "ACORD Forms",
endpoint: "/v1/acord",
tier: 1,
vertical: "insurance",
desc: "Multi-carrier coverage view with ACORD compliance badges and reconciliation actions",
regions: ["US"],
schema: {
form_number: "string",
producer: "string",
insured: "string",
carriers: "[{name, naic, policy}]",
coverages: "[{type, limit, deductible}]",
effective_date: "date",
},
},
{
name: "Declarations Pages",
endpoint: "/v1/dec-page",
tier: 1,
vertical: "insurance",
desc: "Coverage summary with gap highlights, endorsement changes, and premium calculator",
regions: ["US", "UK", "CA", "AU"],
schema: {
named_insured: "string",
policy_number: "string",
effective: "date",
expiry: "date",
coverages: "[{type, limit, deductible, premium}]",
total_premium: "number",
endorsements: "[string]",
},
},
{
name: "Explanation of Benefits",
endpoint: "/v1/eob",
tier: 1,
vertical: "insurance",
desc: "Benefit breakdown with denial codes, patient cost visibility, and billing action buttons",
regions: ["US"],
schema: {
patient: "string",
provider: "string",
service_date: "date",
services: "[{code, description, billed, allowed, paid, patient_resp}]",
denial_codes: "[string]?",
total_patient_owed: "number",
},
},
{
name: "Subrogation Notices",
endpoint: "/v1/subrogation",
tier: 1,
vertical: "insurance",
desc: "Recovery opportunity tracker with status updates, lien tracking, and settlement AI",
regions: ["US", "UK"],
schema: {
claim_number: "string",
claimant: "string",
liable_party: "string",
loss_date: "date",
recovery_sought: "number",
lien_amount: "number?",
status: "string",
},
},
{
name: "Surety Bonds",
endpoint: "/v1/surety-bond",
tier: 1,
vertical: "insurance",
desc: "Bond status dashboard showing obligee requirements, renewal dates, and compliance checklist",
regions: ["US", "UK", "CA", "AU", "+14"],
schema: {
bond_number: "string",
principal: "string",
obligee: "string",
surety: "string",
bond_amount: "number",
effective_date: "date",
expiry_date: "date",
bond_type: "string",
},
},
];
const compliance: readonly Endpoint[] = [
{
name: "SOC 2 Reports",
endpoint: "/v1/soc2",
tier: 1,
vertical: "compliance",
desc: "Control assessment view with exception severity ratings, trust criteria status, and remediation notes",
regions: ["US", "Global"],
schema: {
report_type: "string",
service_org: "string",
auditor: "string",
period: "{start, end}",
opinion: "string",
exceptions: "[{control, description}]",
trust_criteria: "[string]",
},
},
{
name: "Regulatory Filings",
endpoint: "/v1/regulatory-filing",
tier: 1,
vertical: "compliance",
desc: "Multi-jurisdiction filing calendar with deadline alerts, status tracking, and submission buttons",
regions: ["US", "UK", "EU", "SG", "HK", "+31"],
schema: {
filing_type: "string",
jurisdiction: "string",
entity: "string",
filing_date: "date",
deadline: "date",
status: "string",
reference_number: "string?",
},
},
{
name: "Consent Orders",
endpoint: "/v1/consent-order",
tier: 1,
vertical: "compliance",
desc: "Violation timeline with remediation progress bars, deadline countdowns, and compliance history",
regions: ["US", "UK", "EU"],
schema: {
regulatory_body: "string",
respondent: "string",
order_date: "date",
violations: "[{statute, description}]",
penalties: "number",
remediation: "[string]",
compliance_deadline: "date",
},
},
{
name: "GDPR Processing Agreements",
endpoint: "/v1/dpa",
tier: 1,
vertical: "compliance",
desc: "Data processing overview with transfer mechanism validation, sub-processor registry, and approval flow",
regions: ["EU", "UK", "CH", "Global"],
schema: {
controller: "string",
processor: "string",
data_categories: "[string]",
purposes: "[string]",
sub_processors: "[{name, location}]",
transfer_mechanism: "string",
retention_period: "string",
},
},
{
name: "Sanctions Screening Results",
endpoint: "/v1/sanctions-screen",
tier: 1,
vertical: "compliance",
desc: "Real-time screening results with match confidence scores and one-click disposition",
regions: ["US", "UK", "EU", "Global"],
schema: {
screened_entity: "string",
lists_checked: "[string]",
matches: "[{list, name, score, type}]",
overall_risk: "string",
disposition: "string",
screened_date: "date",
},
},
{
name: "ISO Audit Reports",
endpoint: "/v1/iso-audit",
tier: 1,
vertical: "compliance",
desc: "Audit findings organized by severity with remediation timelines and compliance tracking",
regions: ["Global"],
schema: {
standard: "string",
audit_type: "string",
auditor: "string",
organization: "string",
nonconformities: "[{clause, severity, finding}]",
observations: "[string]",
recommendation: "string",
},
},
{
name: "Incident Reports",
endpoint: "/v1/incident-report",
tier: 1,
vertical: "compliance",
desc: "Incident severity dashboard with root cause analysis, remediation tracking, and escalation status",
regions: ["Global"],
schema: {
incident_id: "string",
date: "date",
severity: "string",
category: "string",
description: "string",
root_cause: "string?",
remediation: "string?",
reported_by: "string",
},
},
];
const finance: readonly Endpoint[] = [
{
name: "Letters of Credit",
endpoint: "/v1/loc",
tier: 1,
vertical: "finance",
desc: "LC tracker with condition verification, expiry alerts, and cash call risk assessment",
regions: ["US", "UK", "HK", "SG", "+34"],
schema: {
lc_number: "string",
issuing_bank: "string",
applicant: "string",
beneficiary: "string",
amount: "number",
currency: "string",
conditions: "[string]",
expiry_date: "date",
type: "string",
},
},
{
name: "Trade Confirmations",
endpoint: "/v1/trade-confirm",
tier: 1,
vertical: "finance",
desc: "Trade confirmation with counterparty validation, settlement date verification, and matching status",
regions: ["US", "UK", "EU", "HK", "JP", "+18"],
schema: {
trade_date: "date",
settlement_date: "date",
security: "string",
identifier: "string",
quantity: "number",
price: "number",
counterparty: "string",
account: "string",
},
},
{
name: "Fund Prospectuses",
endpoint: "/v1/prospectus",
tier: 1,
vertical: "finance",
desc: "Fund profile with fee breakdown, risk level compliance checks, and mandate alignment flags",
regions: ["US", "UK", "EU", "LU", "+12"],
schema: {
fund_name: "string",
fund_type: "string",
objective: "string",
expense_ratio: "number",
risk_level: "string",
min_investment: "number",
performance: "[{period, return}]",
manager: "string",
},
},
{
name: "K-1 Schedules",
endpoint: "/v1/k1",
tier: 1,
vertical: "finance",
desc: "Partnership income view with equity reconciliation, distribution tracking, and tax line mapping",
regions: ["US"],
schema: {
partnership: "string",
partner: "string",
tax_year: "number",
ordinary_income: "number",
rental_income: "number?",
interest_income: "number?",
capital_gains: "number?",
distributions: "number",
capital_account: "number",
},
},
{
name: "10-K / Annual Reports",
endpoint: "/v1/10k",
tier: 1,
vertical: "finance",
desc: "Financial summary with risk factor highlights, year-over-year comparisons, and segment performance",
regions: ["US", "UK", "EU", "JP", "+8"],
schema: {
entity: "string",
fiscal_year: "number",
revenue: "number",
net_income: "number",
total_assets: "number",
risk_factors: "[string]",
segments: "[{name, revenue}]",
auditor: "string",
},
},
{
name: "Bank Statements",
endpoint: "/v1/bank-statement",
tier: 1,
vertical: "finance",
desc: "Transaction timeline with anomaly detection, balance reconciliation, and cash flow insights",
regions: ["US", "UK", "EU", "CA", "AU", "+41"],
schema: {
institution: "string",
account_last_4: "string",
period: "{start, end}",
opening_balance: "number",
closing_balance: "number",
transactions: "[{date, desc, amount, balance}]",
},
},
{
name: "Invoices",
endpoint: "/v1/invoice",
tier: 1,
vertical: "finance",
desc: "Three-way match status, approval actions, and AI chat for line-item disputes",
regions: ["US", "UK", "EU", "DE", "JP", "BR", "+52"],
schema: {
vendor_name: "string",
invoice_number: "string",
date: "date",
line_items: "[{desc, qty, unit_price, total}]",
subtotal: "number",
tax: "number",
total: "number",
payment_terms: "string",
},
},
];
const legal: readonly Endpoint[] = [
{
name: "Contracts",
endpoint: "/v1/contract",
tier: 1,
vertical: "legal",
desc: "Clause-by-clause risk highlights, renewal countdown, and negotiation AI",
regions: ["Global"],
schema: {
parties: "[{name, role}]",
effective_date: "date",
term_months: "number",
renewal: "string",
governing_law: "string",
signature_status: "string",
},
},
{
name: "Court Filings",
endpoint: "/v1/court-filing",
tier: 1,
vertical: "legal",
desc: "Docket event timeline with deadline alerts, motion status, and counsel response tracking",
regions: ["US", "UK", "CA", "AU", "+16"],
schema: {
case_number: "string",
court: "string",
parties: "[{name, role}]",
filing_date: "date",
document_class: "string",
docket_entries: "[{date, description}]",
},
},
{
name: "Corporate Formation Docs",
endpoint: "/v1/corp-formation",
tier: 1,
vertical: "legal",
desc: "Entity status dashboard with good standing checks, officer compliance, and filing tracker",
regions: ["US", "UK", "DE", "SG", "HK", "+28"],
schema: {
entity_name: "string",
entity_type: "string",
jurisdiction: "string",
formation_date: "date",
officers: "[{name, title}]",
registered_agent: "string",
authorized_shares: "number?",
},
},
{
name: "UCC Filings",
endpoint: "/v1/ucc",
tier: 1,
vertical: "legal",
desc: "UCC status view with lapse countdown, priority verification, and collateral tracking",
regions: ["US"],
schema: {
filing_number: "string",
filing_date: "date",
secured_party: "string",
debtor: "string",
collateral: "string",
filing_office: "string",
status: "string",
lapse_date: "date",
},
},
{
name: "Powers of Attorney",
endpoint: "/v1/poa",
tier: 1,
vertical: "legal",
desc: "Agent authority scope with durable status verification, witness records, and action permissions",
regions: ["US", "UK", "EU", "Global"],
schema: {
principal: "string",
agent: "string",
scope: "[string]",
effective_date: "date",
durable: "boolean",
expiry_date: "date?",
witnesses: "[string]",
},
},
{
name: "Patent Applications",
endpoint: "/v1/patent",
tier: 1,
vertical: "legal",
desc: "Patent prosecution timeline with office action tracking, fee deadlines, and claim status",
regions: ["US", "EU", "JP", "CN", "KR", "+8"],
schema: {
application_number: "string",
title: "string",
inventors: "[string]",
assignee: "string",
priority_date: "date",
classifications: "[string]",
claims_count: "number",
status: "string",
},
},
];
const healthcare: readonly Endpoint[] = [
{
name: "Prior Authorizations",
endpoint: "/v1/prior-auth",
tier: 1,
vertical: "healthcare",
desc: "Decision tracking, medical necessity AI, and automatic payer follow-up notifications",
regions: ["US"],
schema: {
patient_id: "string",
provider_npi: "string",
payer: "string",
procedure_codes: "[string]",
diagnosis_codes: "[string]",
medical_necessity: "string",
decision: "string",
auth_number: "string?",
},
},
{
name: "Discharge Summaries",
endpoint: "/v1/discharge",
tier: 1,
vertical: "healthcare",
desc: "Discharge plan with follow-up order checklist, medication list, and continuity of care actions",
regions: ["US", "UK", "CA", "AU"],
schema: {
patient_id: "string",
admission_date: "date",
discharge_date: "date",
diagnoses: "[{code, description}]",
procedures: "[string]",
medications: "[{name, dose, frequency}]",
follow_up: "[string]",
},
},
{
name: "Clinical Trial Documents",
endpoint: "/v1/clinical-trial",
tier: 1,
vertical: "healthcare",
desc: "Trial progress view with enrollment metrics, site performance, and endpoint tracking",
regions: ["US", "EU", "UK", "JP", "+12"],
schema: {
trial_id: "string",
phase: "string",
sponsor: "string",
indication: "string",
primary_endpoint: "string",
enrollment: "number",
sites: "number",
status: "string",
},
},
{
name: "FDA Submissions",
endpoint: "/v1/fda-submission",
tier: 1,
vertical: "healthcare",
desc: "Submission status timeline with decision tracking, reviewer feedback, and compliance alerts",
regions: ["US"],
schema: {
submission_type: "string",
submission_number: "string",
applicant: "string",
product_name: "string",
classification: "string",
predicate_device: "string?",
decision: "string",
decision_date: "date?",
},
},
{
name: "Pathology Reports",
endpoint: "/v1/pathology",
tier: 1,
vertical: "healthcare",
desc: "Pathology summary with diagnostic alerts, biomarker results, and tumor board routing",
regions: ["US", "UK", "EU", "Global"],
schema: {
patient_id: "string",
specimen_type: "string",
diagnosis: "string",
staging: "string?",
margins: "string",
biomarkers: "[{marker, result}]",
pathologist: "string",
},
},
{
name: "Patient Intake Forms",
endpoint: "/v1/patient-intake",
tier: 1,
vertical: "healthcare",
desc: "Patient profile with allergy alerts, medication conflict detection, and insurance verification",
regions: ["US", "UK", "CA", "AU", "+18"],
schema: {
patient_name: "string",
dob: "date",
insurance_provider: "string",
policy_number: "string",
allergies: "[string]",
medications: "[string]",
chief_complaint: "string",
},
},
];
const government: readonly Endpoint[] = [
{
name: "Tax Forms",
endpoint: "/v1/tax-form",
tier: 1,
vertical: "government",
desc: "Tax liability view with filing deadline alerts, jurisdiction tracker, and e-file actions",
regions: ["US", "UK", "DE", "FR", "BR", "JP", "IN", "+43"],
schema: {
form_type: "string",
jurisdiction: "string",
tax_year: "number",
entity: "string",
gross_income: "number",
tax_withheld: "number",
filing_status: "string",
},
},
{
name: "Permits & Licenses",
endpoint: "/v1/permit",
tier: 1,
vertical: "government",
desc: "Permit dashboard showing status, conditions, renewal dates, and compliance checklist",
regions: ["US", "UK", "EU", "CA", "AU", "+32"],
schema: {
permit_type: "string",
permit_number: "string",
issuing_authority: "string",
holder: "string",
issue_date: "date",
expiry_date: "date",
conditions: "[string]",
status: "string",
},
},
{
name: "Grant Applications",
endpoint: "/v1/grant",
tier: 1,
vertical: "government",
desc: "Grant status with approval workflow, funding milestones, and compliance audit tracking",
regions: ["US", "UK", "EU"],
schema: {
applicant: "string",
program: "string",
amount_requested: "number",
project_title: "string",
period: "{start, end}",
budget_categories: "[{category, amount}]",
status: "string",
},
},
{
name: "FOIA Responses",
endpoint: "/v1/foia",
tier: 1,
vertical: "government",
desc: "Request status with exemption review, redaction tracker, and disclosure timeline",
regions: ["US", "UK", "CA", "AU"],
schema: {
request_number: "string",
agency: "string",
requester: "string",
responsive_pages: "number",
redacted_pages: "number",
exemptions_cited: "[string]",
disposition: "string",
},
},
{
name: "Municipal Filings",
endpoint: "/v1/municipal-filing",
tier: 1,
vertical: "government",
desc: "Filing timeline with hearing date alerts, public comment deadline, and status updates",
regions: ["US", "UK", "CA", "+18"],
schema: {
filing_type: "string",
municipality: "string",
applicant: "string",
property_address: "string?",
date: "date",
status: "string",
hearing_date: "date?",
},
},
{
name: "Customs Declarations",
endpoint: "/v1/customs",
tier: 1,
vertical: "government",
desc: "Customs entry view with HS code mapping, duty calculation, and tariff classification AI",
regions: ["US", "UK", "EU", "CN", "JP", "SG", "+48"],
schema: {
entry_number: "string",
importer: "string",
country_origin: "string",
items: "[{hs_code, description, value, duty}]",
total_value: "number",
total_duty: "number",
port: "string",
},
},
];
const operations: readonly Endpoint[] = [
{
name: "Bills of Lading",
endpoint: "/v1/bol",
tier: 1,
vertical: "operations",
desc: "Shipping document view with incoterm validation, port tracking, and cargo checklist",
regions: ["Global"],
schema: {
bol_number: "string",
shipper: "string",
consignee: "string",
carrier: "string",
vessel: "string?",
port_loading: "string",
port_discharge: "string",
goods: "[{description, weight, packages}]",
},
},
{
name: "Certificates of Origin",
endpoint: "/v1/cert-origin",
tier: 1,
vertical: "operations",
desc: "Certificate details with tariff eligibility verification, rules of origin check, and compliance badges",
regions: ["US", "EU", "UK", "MX", "CA", "+38"],
schema: {
certificate_number: "string",
exporter: "string",
importer: "string",
country_origin: "string",
goods: "[{description, hs_code, value}]",
trade_agreement: "string?",
issued_by: "string",
},
},
{
name: "Warehouse Receipts",
endpoint: "/v1/warehouse-receipt",
tier: 1,
vertical: "operations",
desc: "Warehouse inventory view with lien holder tracking, withdrawal requests, and storage timeline",
regions: ["US", "UK", "EU", "+22"],
schema: {
receipt_number: "string",
warehouse: "string",
depositor: "string",
goods: "[{description, quantity, unit}]",
storage_date: "date",
location: "string",
lien_status: "string",
},
},
{
name: "Inspection Reports",
endpoint: "/v1/inspection",
tier: 1,
vertical: "operations",
desc: "Inspection findings with remediation actions, re-audit scheduling, and compliance status",
regions: ["Global"],
schema: {
inspector: "string",
date: "date",
location: "string",
findings: "[{item, status, note}]",
overall_status: "string",
next_inspection: "date?",
},
},
{
name: "Purchase Orders",
endpoint: "/v1/purchase-order",
tier: 1,
vertical: "operations",
desc: "PO status with approval workflow, invoice matching, and delivery tracking buttons",
regions: ["Global"],
schema: {
po_number: "string",
vendor: "string",
date: "date",
line_items: "[{desc, qty, unit_price, total}]",
total: "number",
delivery_terms: "string",
approved_by: "string?",
},
},
{
name: "Packing Lists",
endpoint: "/v1/packing-list",
tier: 1,
vertical: "operations",
desc: "Shipment manifest with PO reconciliation, receiving report actions, and discrepancy alerts",
regions: ["Global"],
schema: {
shipment_id: "string",
shipper: "string",
packages: "[{package_id, contents, weight, dimensions}]",
total_packages: "number",
total_weight: "string",
po_reference: "string?",
},
},
];
const hr: readonly Endpoint[] = [
{
name: "I-9 / Right to Work",
endpoint: "/v1/i9",
tier: 1,
vertical: "hr",
desc: "Verification status with document validity tracking, expiry alerts, and re-verification scheduler",
regions: ["US", "UK", "EU", "AU", "CA"],
schema: {
employee_name: "string",
document_type: "string",
document_number: "string",
expiration_date: "date?",
issuing_authority: "string",
verified: "boolean",
},
},
{
name: "Employment Verification Letters",
endpoint: "/v1/employment-verification",
tier: 1,
vertical: "hr",
desc: "Employment history view with title verification, salary details, and underwriting status",
regions: ["US", "UK", "CA", "AU", "+14"],
schema: {
employer: "string",
employee: "string",
start_date: "date",
end_date: "date?",
title: "string",
salary: "number?",
employment_status: "string",
},
},
{
name: "Workers Comp Claims",
endpoint: "/v1/workers-comp",
tier: 1,
vertical: "hr",
desc: "Claim status with injury timeline, return-to-work plan, and case management actions",
regions: ["US", "UK", "CA", "AU"],
schema: {
claim_number: "string",
employee: "string",
injury_date: "date",
injury_type: "string",
body_part: "string",
provider: "string",
lost_days: "number",
claim_status: "string",
},
},
{
name: "Benefits Enrollment",
endpoint: "/v1/benefits-enrollment",
tier: 1,
vertical: "hr",
desc: "Enrollment status with dependent tracking, plan comparison, and open enrollment countdown",
regions: ["US", "UK", "CA"],
schema: {
employee: "string",
plan_type: "string",
coverage_tier: "string",
dependents: "[{name, relationship}]",
effective_date: "date",
employee_contribution: "number",
},
},
{
name: "Separation Agreements",
endpoint: "/v1/separation",
tier: 1,
vertical: "hr",
desc: "Separation terms dashboard with non-compete tracking, severance payment status, and sign-off",
regions: ["US", "UK", "EU", "Global"],
schema: {
employee: "string",
employer: "string",
separation_date: "date",
severance_amount: "number",
non_compete_months: "number?",
release_scope: "string",
consideration_period_days: "number",
},
},
{
name: "Resumes / CVs",
endpoint: "/v1/resume",
tier: 1,
vertical: "hr",
desc: "Candidate profile with skill matching, experience summary, and hiring endpoint status",
regions: ["Global"],
schema: {
name: "string",
email: "string",
phone: "string?",
experience: "[{company, title, start, end}]",
education: "[{school, degree, year}]",
skills: "[string]",
},
},
];
const realestate: readonly Endpoint[] = [
{
name: "Title Reports",
endpoint: "/v1/title-report",
tier: 1,
vertical: "realestate",
desc: "Title status with defect highlights, lien tracker, and insurance coverage verification",
regions: ["US", "UK", "CA", "AU"],
schema: {
property_address: "string",
owner: "string",
legal_description: "string",
liens: "[{type, holder, amount}]",
easements: "[string]",
exceptions: "[string]",
effective_date: "date",
},
},
{
name: "Appraisals",
endpoint: "/v1/appraisal",
tier: 1,
vertical: "realestate",
desc: "Property valuation with comparable analysis, condition assessment, and underwriting routing",
regions: ["US", "UK", "CA", "AU", "+8"],
schema: {
property_address: "string",
appraised_value: "number",
approach: "string",
comparables: "[{address, sale_price, adjustments}]",
condition: "string",
appraiser: "string",
date: "date",
},
},
{
name: "Environmental Assessments",
endpoint: "/v1/environmental",
tier: 1,
vertical: "realestate",
desc: "Phase assessment with liability findings, remediation recommendations, and insurance buttons",
regions: ["US", "UK", "EU", "CA"],
schema: {
property_address: "string",
phase: "string",
findings: "[{condition, severity, description}]",
recs: "[{condition, severity}]",
consultant: "string",
date: "date",
clean: "boolean",
},
},
{
name: "Lease Abstracts",
endpoint: "/v1/lease-abstract",
tier: 1,
vertical: "realestate",
desc: "Lease timeline with expiration alerts, renewal option tracking, and rent escalation calculator",
regions: ["US", "UK", "EU", "AU", "+12"],
schema: {
tenant: "string",
landlord: "string",
premises: "string",
commencement: "date",
expiry: "date",
base_rent: "number",
escalation: "string",
renewal_options: "[{term, notice_period}]",
},
},
{
name: "Closing Disclosures",
endpoint: "/v1/closing-disclosure",
tier: 1,
vertical: "realestate",
desc: "Closing costs view with TRID compliance check, fee comparison, and settlement team routing",
regions: ["US"],
schema: {
borrower: "string",
property: "string",
loan_amount: "number",
interest_rate: "number",
monthly_payment: "number",
closing_costs: "number",
cash_to_close: "number",
closing_date: "date",
},
},
{
name: "Zoning Documents",
endpoint: "/v1/zoning",
tier: 1,
vertical: "realestate",
desc: "Zoning summary with use restrictions, setback requirements, and variance application buttons",
regions: ["US", "UK", "CA"],
schema: {
property_address: "string",
zone_class: "string",
permitted_uses: "[string]",
setbacks: "{front, side, rear}",
far: "number",
max_height: "string",
variances: "[string]?",
},
},
];
const energy: readonly Endpoint[] = [
{
name: "Environmental Impact Statements",
endpoint: "/v1/eis",
tier: 1,
vertical: "energy",
desc: "Impact assessment with alternatives comparison, mitigation tracking, and public comment dashboard",
regions: ["US", "UK", "EU", "CA", "AU", "+14"],
schema: {
project: "string",
lead_agency: "string",
alternatives: "[{name, description}]",
impacts: "[{resource, severity, mitigation}]",
public_comments: "number",
record_of_decision: "string?",
},
},
{
name: "Pipeline Permits",
endpoint: "/v1/pipeline-permit",
tier: 1,
vertical: "energy",
desc: "Permit status with compliance conditions, route visualization, and segment monitoring tools",
regions: ["US", "UK", "CA", "AU"],
schema: {
permit_number: "string",
operator: "string",
route: "string",
capacity: "string",
material: "string",
length_miles: "number",
conditions: "[string]",
expiry_date: "date",
},
},
{
name: "NERC Compliance",
endpoint: "/v1/nerc",
tier: 1,
vertical: "energy",
desc: "Violation dashboard organized by severity, remediation plan tracking, and completion status",
regions: ["US", "CA"],
schema: {
entity: "string",
standard: "string",
finding: "string",
severity: "string",
violation_date: "date",
mitigation_plan: "string",
completion_date: "date?",
},
},
{
name: "Interconnection Agreements",
endpoint: "/v1/interconnection",
tier: 1,
vertical: "energy",
desc: "Generator connection agreement with network upgrade checklist and commercial operation date tracker",
regions: ["US", "UK", "EU", "AU"],
schema: {
generator: "string",
utility: "string",
capacity_mw: "number",
poi: "string",
voltage: "string",
commercial_operation_date: "date",
term_years: "number",
network_upgrades: "[string]",
},
},
{
name: "Well Logs",
endpoint: "/v1/well-log",
tier: 1,
vertical: "energy",
desc: "Well section with formation breakdown, depth tracking, and development planning actions",
regions: ["US", "CA", "UK", "AU", "+12"],
schema: {
well_name: "string",
api_number: "string",
operator: "string",
spud_date: "date",
total_depth: "number",
formations: "[{name, top, bottom, lithology}]",
status: "string",
},
},
{
name: "Decommissioning Reports",
endpoint: "/v1/decommissioning",
tier: 1,
vertical: "energy",
desc: "Decommission budget dashboard with remediation items, timeline, and regulatory approval flow",
regions: ["US", "UK", "EU", "CA"],
schema: {
facility: "string",
operator: "string",
asset_count: "number",
estimated_cost: "number",
timeline: "{start, end}",
remediation_items: "[{item, status}]",
regulatory_approval: "string",
},
},
];
export const VERTICALS: readonly Vertical[] = [
{
key: "insurance",
label: "Insurance",
color: "var(--color-cat-insurance)",
endpoints: insurance,
},
{
key: "compliance",
label: "Compliance",
color: "var(--color-cat-compliance)",
endpoints: compliance,
},
{
key: "finance",
label: "Finance",
color: "var(--color-cat-finance)",
endpoints: finance,
},
{
key: "legal",
label: "Legal",
color: "var(--color-cat-legal)",
endpoints: legal,
},
{
key: "healthcare",
label: "Healthcare",
color: "var(--color-cat-healthcare)",
endpoints: healthcare,
},
{
key: "government",
label: "Government",
color: "var(--color-cat-government)",
endpoints: government,
},
{
key: "operations",
label: "Supply Chain",
color: "var(--color-cat-operations)",
endpoints: operations,
},
{ key: "hr", label: "HR", color: "var(--color-cat-hr)", endpoints: hr },
{
key: "realestate",
label: "Real Estate",
color: "var(--color-cat-realestate)",
endpoints: realestate,
},
{
key: "energy",
label: "Energy & Infrastructure",
color: "var(--color-cat-energy)",
endpoints: energy,
},
];
/** Flat list of every endpoint across all verticals. */
export const ALL_ENDPOINTS: readonly Endpoint[] = VERTICALS.flatMap(
(v) => v.endpoints,
);
/** Index by path, e.g. ENDPOINTS_BY_PATH['/v1/coi']. */
export const ENDPOINTS_BY_PATH: Record<string, Endpoint> = Object.fromEntries(
ALL_ENDPOINTS.map((e) => [e.endpoint, e]),
);
/** Lookup a vertical by its key. */
export const lookupVertical = (key: VerticalKey): Vertical | null =>
VERTICALS.find((v) => v.key === key) ?? null;
/** Lookup an endpoint by its route path. */
export const lookupEndpoint = (path: string): Endpoint | null =>
ENDPOINTS_BY_PATH[path] ?? null;
/** Tier-availability gate used by the docs / cards / picker. */
export function isEndpointAvailable(endpoint: Endpoint, tier: Tier): boolean {
if (endpoint.tier === 0) return true;
if (endpoint.tier === 1) return tier === "pro" || tier === "enterprise";
return tier === "enterprise";
}