This is a Maersk booking confirmation. Documents may be bilingual (English, or English+Chinese).

transportLegs rules:
- Sea freight only — emit one leg per row of the 'Intended Transport Plan' table whose 'Mode' column is 'MVS' (Motor Vessel / ocean), in chronological order.
- SKIP rows whose 'Mode' is anything else: inland rail/truck/feeder codes such as 'RCO' (rail combined), 'RR' (rail), 'TRK' (truck), 'BAR' (barge), 'FED' / 'FEE' (feeder), etc. These are pre/post-carriage inland legs and must NOT be emitted as transport legs even when they appear in the table. The 'Vessel' / 'Voy No.' columns are typically blank on such rows — that is itself a signal, but the authoritative filter is the 'Mode' column.
- portOfLoading = 'From' column verbatim. portOfDischarge = 'To' column verbatim. etd / eta = ETD / ETA columns. vesselName = 'Vessel' column. voyage = 'Voy No.' column.
- Connectivity (after dropping inland rows): leg N's portOfDischarge MUST equal leg N+1's portOfLoading. The final ocean leg's portOfDischarge corresponds to the document's 'To:' place of delivery only when no post-ocean inland leg exists; otherwise the table's last MVS row's 'To' is the discharge port (terminal-level wording in the table is fine, but the city must match the ocean discharge — NOT an inland onward city).
- Time integrity ('no time travel'): each leg's eta must be >= its etd, AND <= the next leg's etd.
- If the 'Intended Transport Plan' table is absent and only a single 'Vessel/Voyage' line is shown, emit one leg using that vessel/voyage and the document's 'From:' / 'To:' for ports.
