02 — System Diagram

🔍 Open the Interactive Diagram Viewer — pan, mouse-wheel zoom, fit-to-screen, full-screen, per-area tabs, the full ERD, and a focus mode that draws one model and its neighbours at a chosen depth. VesselVoyage and VoyagePortCall fan out to many tables, so their links can be hidden to declutter the overview.

Regenerate the viewer after any DSL, menu_config.yaml or diagram_config.yaml change: python scripts/build_diagram_viewer.py coast_06_voyage.

Voyages & Port Calls

flowchart LR
  V[VoyageVessel] --> VY[VesselVoyage]
  VY --> PC[VoyagePortCall]
  PC --> LG[VesselVoyageLeg]
  PC --> CA[CallActivity]
  PC --> BV[CallBerthVisit]

Cargo & Calls

flowchart LR
  PC[VoyagePortCall] --> AL[CargoCallAllocation]
  AL --> OF[CargoOperationFact]
  PC --> OF
  MS[ManifestCargoSnapshot]

Vessels, Ports & Berths

flowchart LR
  PO[VoyagePort] --> TE[VoyageTerminal]
  TE --> BE[VoyageBerth]
  AP[AgentAppointmentRef]
flowchart LR
  PO[VoyagePort] --> PC[VoyagePortCall]
  BE[VoyageBerth] --> PC
  VY[VesselVoyage] --> AL[CargoCallAllocation]
  VY --> EX[VoyageException]
  PC --> EX
  VY --> AU[VoyageAudit]
  PC --> AU

No shared tables and no foreign keys: sibling applications are linked by canonical_ref strings and by messages.

flowchart LR
  subgraph coast_06_voyage
    VY[VesselVoyage]
    PC[VoyagePortCall]
    AL[CargoCallAllocation]
    OF[CargoOperationFact]
  end
  subgraph coast_02_manifest
    ML[ManifestLine]
  end
  subgraph coast_07_accounts
    AP[Agent appointment]
  end
  subgraph coast_16_assurance
    CS[AssuranceCase]
  end
  ML -. "manifest.effective_cargo" .-> AL
  AP -. "accounts.appointment_changed" .-> PC
  VY -. "voyage.snapshot" .-> ML
  PC -. "voyage.portcall_snapshot" .-> ML
  AL -. "voyage.cargo_call_mapped" .-> AP
  PC -. "voyage.activity_verified" .-> AP
  OF -. "voyage.exception_raised" .-> CS