Mandatory fields (blocking)
Mandatory fields are marked with a blue left border on the input. If a mandatory field is empty or invalid when you click Submit:- An inline error message appears below the field
- The Submit button is blocked until the error is cleared
- Voyage Number, Location, Date/Time + GMT offset
- Latitude, Longitude (must parse as DMS)
- Vessel Condition
- Port (when In Port)
required="" attribute and styled by a mandatory CSS class.
Format errors (blocking)
Some fields enforce a format on top of being non-empty:| Field | Expected format | Error if wrong |
|---|---|---|
| Latitude | DD MM' SS" N/S | ”Invalid latitude format” |
| Longitude | DD MM' SS" E/W | ”Invalid longitude format” |
| Date | YYYY-MM-DD | ”Invalid date” |
| Time | HH:MM (24h) | “Invalid time” |
| Numeric fields | Numbers only | ”Must be a number” |
6 1 54 N and it becomes 6 1' 54" N.
Auto-calculated fields (read-only)
These can never be wrong because you can’t type into them. Fix the inputs that feed them:| Field | Formula |
|---|---|
| Slip % | (observed_distance − engine_distance) / observed_distance × 100 |
| Reported Speed | observed_distance / steaming_hours |
| Average RPM | main_engine_revs / (main_engine_hours × 60) |
| Average KW | main_engine_kwhrs / main_engine_hours |
| Mean Draft | (fwd_draft + aft_draft) / 2 |
| Generator KWhrs | generator_hours × average_kw |
Validation limits (non-blocking warnings)
The Settings panel has a Validation Limits section with collapsible groups. Each group lets the office configure a per-vessel Min and Max for parameters likeReported Speed, Bilge Water ROB, BDN Quantity, etc.

- An orange warning appears next to the input
- The form does not block Submit — the warning is informational
Configurable groups
| Group | Parameters |
|---|---|
| Draft & Displacement | Fwd Draft, Aft Draft, DWT, Displacement |
| Speed & Distance | Reported Speed, CP Speed, Observed/Engine/Speed Log Distance |
| Main Engine | ME Hours, Revs, KWhrs, Average KW, ME Output, Steaming Hours |
| Generators & Auxiliary | Gen 1–4 Hours/KWhrs, A/E Sea Load, Aux Boiler, Incinerator, FW Generator |
| Tanks & ROB | Bilge Water, Sludge, Fresh Water, Slops |
| Lub Oil ROB | High TBN, Low TBN, ME Crankcase, A/E Lub Oil |
| Fuel ROB | HSFO, LSMGO, VLSFO, VLSFO (≤80 cSt) |
| Weather | Air Temp, Sea Temp, Bar Pressure, Avg Cargo Temp, Heading |
| BDN Quantity (MT) | Per fuel grade |
| Fuel Density (kg/m³) | Per fuel grade |
| Sulphur Content (%) | Per fuel grade |
| Viscosity (cSt) | Per fuel grade |
Setting limits per vessel
This is a shore-side task done once per vessel:- Open the form on the office machine
- Click the gear icon → Settings
- Expand each group, type Min/Max for each parameter
- Click Save & Apply
- Click Export Configured HTML to download a vessel-specific copy with the limits baked in
Cross-field validation
A few fields validate against each other:- Steaming Hours ≤ Main Engine Hours — steaming time can’t exceed engine running time
- Engine Distance ≤ Observed Distance — slip can’t be negative
- Mean Draft = (Fwd + Aft) / 2 — auto-recomputed
- Generator KWhrs derives from Hours — typing one updates the other if Average KW is set
- Aft Draft − Fwd Draft = Trim — informational only
Error UI
- Red inline message below an input → blocking error
- Orange badge or border → non-blocking warning (Settings limit)
- Grey input → auto-calculated, read-only
- Blue left border → mandatory field
See also
- Submitting — what happens after validation passes
- Setting up history.json → Part 1 — how the office configures limits and exports the form