# TT-007 · Vessel registry — method

**Grade: REPORTED** for gross tonnage and hull type. **The TEU column is MODELLED and
is never quotable as a measurement.**

## Why it exists

Every other instrument counts *boats*. Without this, a 15,000 TEU hull and an 8,000 TEU
hull are both "one arrival". This converts a count of ships into a measure of capacity,
and — since 2026-07-30 — tells us **what kind of ship** each hull actually is.

## Source

Wikidata, via SPARQL, keyed on **IMO number** (`P458`). The IMO number is a permanent
7-digit hull identifier with a check digit. **It encodes nothing about the ship's type**
— it is only ever a lookup key.

## The two properties, and why the first one was wrong

| property | what it is | populated on |
|---|---|---|
| `P289` **vessel class** | the *named sister-ship class* — "Colombo Express-class" | **~8%** |
| `P31` **instance of** | the fundamental hull type — "container ship", "bulk carrier" | **~100%** |

Until 2026-07-30 this instrument queried only `P289`, so it could not tell a container
ship from a bulk carrier. Adding `P31` identified real contamination inside the
container fleet: **18 bulk carriers, 6 car carriers, 4 vehicle cargo ships and 4 bare
ro-ro hulls.**

Residual gap: **81 hulls return the generic value `"ship"`**, which is unusable. They
still receive a TEU estimate, marked `CLASS UNVERIFIED` in the basis string.

Deadweight (`P4131`) is **0% populated**, which kills the clean DWT/GT discriminator
(≈1.0–1.2 container, 1.7–1.9 bulk).

## TEU is estimated, and the estimate is published with it

AIS carries no capacity field and no free source publishes TEU per hull. Wikidata
carries gross tonnage for most large hulls, and GT/TEU is stable across the modern
container fleet at roughly 11. So:

```
TEU ≈ gross tonnage / 11        (±10%)
```

The divisor is published alongside the result, so a reader can recompute it. Every row
carries a `teu_basis` string stating exactly how its figure was derived.

**The divisor only applies to container hulls.** A vehicle carrier or bulk carrier has
a completely different tonnage-to-capacity relationship. Before the guard existed, this
registry published three US Navy vehicle carriers as container ships — `CAPE DUCATO` at
2,671 TEU, `USNS RED CLOUD` at 6,612, `USNS BENAVIDEZ` at 6,306.

An explicit container mention always overrides an exclusion keyword: a
**roll-on/roll-off *container* ship** carries boxes, a bare **roll-on/roll-off ship**
does not. Wikidata spells the phrase out, which the shorter `ro-ro` keyword never
matched — three bare ro-ro hulls were receiving estimates until this was fixed.

## What hull form cannot do

Tested and rejected 2026-07-30: **`GT / (LOA × beam)` does not classify.** Container
ships span 4.85–8.03 at p10–p90; vehicle carriers span 4.73–7.87. Complete overlap,
because car carriers are also tall boxy ships. Worse, the ratio tracks **size**, not
type — `CMA CGM HOMERE` at 170 m scores 3.83, `EVER MEGA` at 366 m scores 8.86.

There is no substitute for a registry.

## Confidence, stated honestly

Of the 196 vessels in the current call set:

| | share |
|---|---|
| confirmed container by registry type | **24%** |
| confirmed NOT container — excludable | 6% |
| liner name only, type inferred not confirmed | 20% |
| **genuinely unknown** — no type and no liner name | **49%** |

**So container ships cannot yet be identified with confidence.** Half the fleet is
unresolved, and about half of those have no Wikidata entry at all. What has improved is
the ability to *exclude*: hulls the registry positively names as something else are now
dropped, where previously they were counted as container traffic.

Unknown hulls are **kept**, deliberately. Dropping traffic we merely cannot classify
would thin an already small sample and could hide real congestion.

## Better sources, and why they are not used

| candidate | has hull type | machine-retrievable | status |
|---|---|---|---|
| **THETIS-MRV** (EMSA) | yes, plus reported cargo carried | **no endpoint found** — three REST paths and a POST search all 404 | best candidate; needs browser inspection of the portal's XHR |
| IMO GISIS | yes, authoritative | free account, no bulk API | possible for targeted lookups |
| Lloyd's Register | yes, incl. deadweight | registration, no bulk | LR-classed hulls only |
| Equasis | yes | account + scraping, ToS unclear | fallback |
| commercial (VesselFinder, MarineTraffic, Datalastic) | yes | paid | usable only if named and cited |

## Cadence and operations

Looked up in batches of 40 IMOs, backed off on failure. Idempotent: the same IMO set
produces the same rows. Hulls already carrying tonnage are skipped on re-run.

```
node registry.js            look up IMOs our own receivers have seen
```

Current: 246 rows, 200 carrying a TEU estimate, 1,107,713 TEU total.
