Fisheries VMS Domain · Lesson 2 of ∞ · ← Lesson 1
Surveillance, in detail
One acronym hides three different legal problems. e-Boat's data model hides a matching split, and it isn't accidental.
Lesson 1 introduced IUU fishing as the umbrella problem MCS exists to solve. It's worth pulling the acronym apart, because the three letters are not three flavours of the same thing — they're three genuinely different failure modes, and a mature system needs to tell them apart.
| Letter | Failure mode | Example |
|---|---|---|
| Illegal | Fishing in violation of a state's laws or an RFMO's binding rules | Fishing inside a closed area; fishing without a valid licence |
| Unreported | Fishing that happened but wasn't declared, or was declared falsely | Landing more fish than the catch report states |
| Unregulated | Fishing in areas or for stocks with no applicable conservation rules, or by stateless vessels | A vessel with no flag state fishing in an unregulated high-seas pocket |
Source: FAO's IUU fishing framework hub.
Only the first ("Illegal") is something a live-position system like e-Boat can catch in the moment — a geofence crossing is detectable the instant it happens. "Unreported" is a mismatch between two data sources (position/activity vs. declared catch) that surfaces later, often by cross-checking against e-fish. "Unregulated" is mostly a jurisdictional/legal question, not something telemetry resolves at all. Keep this in mind whenever a ToR requirement talks about detecting something — ask which of the three it's actually catching.
The compliance matrix (docs/compliance/README.md in the repo) splits what looks like one topic — "things that happen" — into two separate requirement groups:
| ToR group | IDs | What it covers |
|---|---|---|
| Event type catalogue, event capture | C-040..C-051 | Anything notable that happened — broader than a breach |
| Violations: catalogue, capture, history | C-052..C-065 | A detected breach of a control rule specifically |
The relationship is: every violation is an event, but not every event is a violation. A vessel entering port is an event. A vessel entering a closed fishing area is an event and a violation. This mirrors the MCS pillars directly — Monitoring produces the event stream (raw facts), Surveillance is the process of checking that stream against Control rules and flagging the subset that breaks them.
In the codebase this shows up as a pipeline, not a single check: EBoat.Gateway normalises incoming telemetry into events; EBoat.GeofenceEvaluator checks position events against geofence rules; EBoat.RuleEngine holds the configurable logic for what counts as a breach; a match produces a violation record, which EBoat.Notifications then acts on. Four separate components for what world practice calls, informally, just "catching a violation" — because each step is genuinely a different concern (ingest, geometry, policy, follow-through), and conflating them is how systems end up with unauditable violation logic buried in ingest code.
Something unclear, or want to go deeper on any term here? Ask the agent that built this lesson — it's your teacher for this workspace, not just a lesson generator.