Coastal Shipping 06 — Vessel, Voyage & Port Call Manager (coast_06_voyage)

The network's authority for which vessel sails which voyage, in what order it calls, and what was actually loaded, discharged and done at each call — vessels, voyages, ordered port calls, berth visits, port service facts and the cargo-to-call mapping with the loading and discharge tally.

Its central question:

Which call did this cargo load at and discharge at, did the vessel really call there, and does what was tallied agree with the frozen manifest?

coast_06_voyage is application SHP-06 of the Coastal Shipping series (Stage 2; coast_NN_<name>, numbered by the pack catalogue; each able to run stand-alone or as a member of a network). It shares no tables and no foreign keys with its siblings (for example coast_02_manifest) — they link by canonical_ref strings and by messages only. All data is fictional.

The spine

VoyageVessel → VesselVoyage → VoyagePortCall → (CallActivity / CallBerthVisit / CargoCallAllocation → CargoOperationFact), with VoyageException and VoyageAudit recording what went wrong and who did what.

The documents

Page What's in it
00 — Overview What the app is, the rules it is built around, the 15 models by area, the demo scenario, the messages
01 — Quick Reference Menu map, every model, status vocabularies, how to run, seed and regenerate
02 — System Diagram The data model as diagrams (+ interactive viewer) and how the app links to its siblings

Status

Built (handlers and workflow, tested): voyage confirm (ordered calls, authorised user, locked schedule) / start / complete / cancel; port call confirm (approved agent appointment for the port, valid at the ETA) / arrive (evidence, in order) / depart (supervisor, frozen manifest snapshot, reconciled tally or an explicit no-cargo declaration, closed berth visit) / reconcile / cancel; service facts verified with evidence; berth visits with no overlapping position; the cargo-to-call mapping (explicit, with automatic matching only when each port appears once) and the tally with variance exceptions; versioned voyage and call snapshots; effective-cargo and appointment projections.

Scheduled: voyage.detect_unmapped raises CALL_MAPPING_MISSING for a cargo line of a frozen manifest still unmapped.

Not built yet: the manifest application does not yet publish manifest.effective_cargo, nor the agency application accounts.appointment_changed (the contracts and handlers are here); stevedoring facts (Stage 3); the voyage snapshot is published only for confirmed voyages. The rules are in integration/ (rules.py, exceptions.py, handlers.py), with their tests under server/tests/integration_apps/.

Prototype system; draft. All names and amounts in the demo data are fictional.