This is an MSC booking confirmation.

transportLegs rules:
- One leg per vessel segment, in chronological order.
- Multi-leg trigger: 'PORT OF TRANSHIPMENT N1' present → at least 2 legs; 'N2' present → 3 legs.
- Connectivity: leg N's portOfDischarge MUST equal leg N+1's portOfLoading. The final leg's portOfDischarge MUST be the document's 'PORT OF DISCHARGE'.
- Time integrity ('no time travel'): each leg's eta must be >= its etd, AND <= the next leg's etd.
- Leg 1: portOfLoading='PORT OF LOADING'; portOfDischarge='PORT OF TRANSHIPMENT N1' if it exists else 'PORT OF DISCHARGE'; vesselName/voyage/imoNumber from the 'VESSEL NAME' row; etd = 2nd timestamp in 'EST. TIME OF ARRIVAL/DEPARTURE'; eta = ETD on the 'PORT OF TRANSHIPMENT N1' row if transhipment exists, otherwise 'EST. TIME OF ARRIVAL' on the PORT OF DISCHARGE row.
- Leg 2 (only if N1 exists): portOfLoading='PORT OF TRANSHIPMENT N1'; portOfDischarge='PORT OF TRANSHIPMENT N2' if it exists else 'PORT OF DISCHARGE'; vesselName/voyage from 'CONNECTING VESSEL N1' row; etd = EST. TIME OF DEPARTURE on PORT OF TRANSHIPMENT N1 row; eta = ETD on PORT OF TRANSHIPMENT N2 row if it exists, otherwise 'EST. TIME OF ARRIVAL' on PORT OF DISCHARGE row.
- Leg 3 (only if N2 exists): portOfLoading='PORT OF TRANSHIPMENT N2'; portOfDischarge='PORT OF DISCHARGE'; vesselName/voyage from 'CONNECTING VESSEL N2' row; etd = EST. TIME OF DEPARTURE on PORT OF TRANSHIPMENT N2 row; eta = 'EST. TIME OF ARRIVAL' on PORT OF DISCHARGE row.
- If a connecting vessel/voyage cell is blank but the leg is required to reach the final POD, still emit the leg with vesselName/voyage/imoNumber null.
