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.