From 9d0c7a198bf603eb33b24bfa3f2b591577896a42 Mon Sep 17 00:00:00 2001 From: "henrik.larsen@dcsa.org" Date: Thu, 21 May 2026 11:16:39 +0200 Subject: [PATCH 1/5] EBL 3.0: SD-2434: Add metadata to correlate TransportDocuments --- .stoplight/styleguide.json | 2 +- ebl/v3/issuance/EBL_ISS_v3.0.4.yaml | 51 +++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 1 deletion(-) diff --git a/.stoplight/styleguide.json b/.stoplight/styleguide.json index 8bd65156..ecaaf61c 100644 --- a/.stoplight/styleguide.json +++ b/.stoplight/styleguide.json @@ -63,7 +63,7 @@ "id": "nfiSNHQHEHtWGvD7vgNLq", "extendedFrom": "", "name": "checkRequirements", - "content": "import { createRulesetFunction } from '@stoplight/spectral-core';\n\n// Should Spectral return an error if unsupported properties are found\nconst IGNORE_UNSUPPORTED_PROPERTIES = new Set([\n 'OVS_HUB_TER_v1.0.0',\n 'OVS_HUB_REF_v1.0.0',\n 'OVS_HUB_NTF_v1.0.0',\n]);\n\n// Should Spectral return an error if wrong parent element is found\nconst IGNORE_PARENT_CHECK = new Set([\n 'OVS_HUB_TER_v1.0.0',\n 'OVS_HUB_REF_v1.0.0',\n 'OVS_HUB_NTF_v1.0.0',\n]);\n\n// Pattern used to find PseudoEnums and enums in descriptions\nconst PSEUDO_ENUM_PATTERN = /\\n *- *`?([A-Z0-9_.]+)`? *(\\(|:)?/g;\n\n// Should Spectral ignore checks regarding \"location\" of the property\n// (parent specific specifications (also if defined in a standard) are ignored)\nconst NO_PARENT_CHECK = new Set([\n //'CS_v1.0.0',\n]);\n\n// List of eBL Platform Solution Providers\nconst EBL_PLATFORM_SOLUTION_PROVIDERS = ['WAVE','CARX','ESSD','IDT','BOLE','EDOX','IQAX','SECR','TRGO','ETEU','TRAC','BRIT','COVA','ETIT','KTNE','CRED','BLOC','DOCU','AEOT','SGTD'];\n\n// List of attributes to be checked\n// For all attributes in ATTRIBUTES_TO_CHECK, this Spectral rule will make sure:\n// * if attribute is in the Spec - the attribute MUST also be in the requirements\n// * if attribute is in the requirements - then it also need to be in the Spec\nconst ATTRIBUTES_TO_CHECK= ['type', 'minLength', 'maxLength', 'pattern', 'enum', 'format', 'deprecated', 'exclusiveMaximum',\n 'exclusiveMinimum', 'maximum', 'minimum', 'minItems', 'maxItems', 'required', 'nullable', 'items', 'title', 'additionalProperties', 'default', 'readOnly', 'writeOnly'];\n\n// List of Objects that must follow the CloudEvent Notification pattern\nconst DCSA_CLOUDEVENT_GROUP = { ShippingInstructionsNotification: {}, TransportDocumentNotification: {}, BookingNotification: {}, ArrivalNoticeNotification: {} };\n\n// Spectral will **ONLY** check the standards in this list (in the future all APIs should be covered).\nconst COVERED_STANDARDS = new Set([\n // Arrival Notice\n // 'AN_v1.0.0-Beta-1',\n // Booking\n 'BKG_v2.0.0',\n 'BKG_v2.0.1',\n 'BKG_v2.0.2',\n 'BKG_v2.0.3',\n 'BKG_v2.0.4',\n 'BKG_v2.0.5',\n // Commercial Schedules\n 'CS_v1.0.0',\n 'CS_v1.0.1',\n 'CS_v1.0.2',\n 'CS_v1.0.3',\n // electronic Bill of Lading\n 'EBL_v3.0.0',\n 'EBL_v3.0.1',\n 'EBL_v3.0.2',\n 'EBL_v3.0.3',\n 'EBL_v3.0.4',\n 'EBL_END_v3.0.2',\n 'EBL_END_v3.0.3',\n 'EBL_END_v3.0.4',\n 'EBL_ISS_v3.0.0',\n 'EBL_ISS_v3.0.1',\n 'EBL_ISS_v3.0.2',\n 'EBL_ISS_v3.0.3',\n 'EBL_ISS_v3.0.4',\n 'EBL_SUR_v3.0.0',\n 'EBL_SUR_v3.0.1',\n 'EBL_SUR_v3.0.2',\n 'EBL_SUR_v3.0.3',\n 'EBL_SUR_v3.0.4',\n 'EBL_PINT_v3.0.0',\n // Just in Time Port Calls\n 'JIT_v2.0.0',\n 'OVS_v3.0.0',\n 'OVS_v3.0.1',\n 'OVS_v3.0.2',\n 'OVS_HUB_TER_v1.0.0',\n 'OVS_HUB_REF_v1.0.0',\n 'OVS_HUB_NTF_v1.0.0',\n]);\n\n// A list of accepted properties that have changed over time or are different for different standards\n// DEFAULT covers all remaining standards\n// \"GROUPS\" - e.g. EBL_BETA2_GROUP: this covers all standards in the EBL Beta 2 release (EBL, ISS, ISS_RSP, SUR, SUR_RSP, EBL_NFT, PINT)\n// - it is possible to define more groups in which the group need to be added next to where EBL_BETA2_GROUP is used\n// If 'parent' is specified - then the spec only allows the property under the list of parents\n// If no 'parent' is specified - the spec applies to all locations in the document\n// parents-specs overrule \"globalSpec\"\n// Enum and required fields (fields specified as lists) MUST be defined in same order\nconst DCSA_PROPERTIES = {\n _20_units: {\n DEFAULT : { type: 'integer', format: 'int32', minimum: '0' }\n },\n _40_units: {\n DEFAULT : { type: 'integer', format: 'int32', minimum: '0' }\n },\n _45_units: {\n DEFAULT : { type: 'integer', format: 'int32', minimum: '0' }\n },\n action: {\n PARENTS : { SurrenderRequestAnswer: {} },\n DEFAULT : { type: 'string', enum: ['SURR', 'SREJ'] },\n },\n actionCode: {\n PARENTS : { EndorsementChainLink: {}, Transaction: { pseudoEnum: ['ISSUE','ENDORSE','SIGN','SURRENDER_FOR_DELIVERY','SURRENDER_FOR_AMENDMENT','SACC','SREJ','BLANK_ENDORSE','ENDORSE_TO_ORDER','TRANSFER'] } },\n DEFAULT : { type: 'string', maxLength: 50, pseudoEnum: ['ISSUE','ENDORSE','SIGN','SURRENDER_FOR_DELIVERY','SURRENDER_FOR_AMENDMENT','BLANK_ENDORSE','ENDORSE_TO_ORDER','TRANSFER','SURRENDERED'] },\n },\n actionDateTime: {\n PARENTS : { EndorsementChainLink: {}, Transaction: {} },\n DEFAULT : { type: 'string', format: 'date-time' },\n },\n ActiveReeferSettings: {\n 'BKG_v2.0.x' : { DEFAULT: { required: ['temperatureSetpoint', 'temperatureUnit'], CHILDREN: ['temperatureSetpoint', 'temperatureUnit', 'o2Setpoint', 'co2Setpoint', 'humiditySetpoint', 'airExchangeSetpoint', 'airExchangeUnit', 'isVentilationOpen', 'isDrainholesOpen', 'isBulbMode', 'isColdTreatmentRequired', 'isControlledAtmosphereRequired', 'isPreCoolingRequired', 'isGeneratorSetRequired'] }, },\n// 'BKG_v2.0.1' : { DEFAULT: { required: ['temperatureSetpoint', 'temperatureUnit'], CHILDREN: ['temperatureSetpoint', 'temperatureUnit', 'o2Setpoint', 'co2Setpoint', 'humiditySetpoint', 'airExchangeSetpoint', 'airExchangeUnit', 'isVentilationOpen', 'isDrainholesOpen', 'isBulbMode', 'isColdTreatmentRequired', 'isControlledAtmosphereRequired', 'isPreCoolingRequired', 'isGeneratorSetRequired'] }, },\n// 'BKG_v2.0.2' : { DEFAULT: { required: ['temperatureSetpoint', 'temperatureUnit'], CHILDREN: ['temperatureSetpoint', 'temperatureUnit', 'o2Setpoint', 'co2Setpoint', 'humiditySetpoint', 'airExchangeSetpoint', 'airExchangeUnit', 'isVentilationOpen', 'isDrainholesOpen', 'isBulbMode', 'isColdTreatmentRequired', 'isControlledAtmosphereRequired', 'isPreCoolingRequired', 'isGeneratorSetRequired'] }, },\n// 'BKG_v2.0.3' : { DEFAULT: { required: ['temperatureSetpoint', 'temperatureUnit'], CHILDREN: ['temperatureSetpoint', 'temperatureUnit', 'o2Setpoint', 'co2Setpoint', 'humiditySetpoint', 'airExchangeSetpoint', 'airExchangeUnit', 'isVentilationOpen', 'isDrainholesOpen', 'isBulbMode', 'isColdTreatmentRequired', 'isControlledAtmosphereRequired', 'isPreCoolingRequired', 'isGeneratorSetRequired'] }, },\n DEFAULT : { type: 'object', title: 'Active Reefer Settings', CHILDREN: ['temperatureSetpoint', 'temperatureUnit', 'o2Setpoint', 'co2Setpoint', 'humiditySetpoint', 'airExchangeSetpoint', 'airExchangeUnit', 'isVentilationOpen', 'isDrainholesOpen', 'isBulbMode', 'isColdTreatmentRequired', 'isControlledAtmosphereRequired'] },\n },\n activeReeferSettings: {\n PARENTS : { RequestedEquipment: {}, RequestedEquipmentShipper: {}, UtilizedTransportEquipmentCarrier: {}, UtilizedTransportEquipment: {} },\n DEFAULT : { $ref: '#/components/schemas/ActiveReeferSettings' },\n },\n actor: {\n PARENTS : { EndorsementChainLink: {}, Transaction: {} },\n DEFAULT : { $ref: '#/components/schemas/ActorParty' },\n },\n actualDateTime: {\n DEFAULT : { type: 'string', format: 'date-time'}\n },\n additionalContainerCargoHandling: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { type: 'string', maxLength: 255 },\n },\n address: {\n 'OVS_v3.0.x' : { PARENTS: { AddressLocation: { type: 'object', required: ['name'] } } },\n PARENTS : {\n Location: {$ref: '#/components/schemas/Address'},\n LoadLocation: {$ref: '#/components/schemas/Address'},\n DischargeLocation: {$ref: '#/components/schemas/Address'},\n PlaceOfReceipt: {$ref: '#/components/schemas/Address'},\n PortOfLoading: {$ref: '#/components/schemas/Address'},\n PortOfDischarge: {$ref: '#/components/schemas/Address'},\n PlaceOfDelivery: {$ref: '#/components/schemas/Address'},\n OnwardInlandRouting: {$ref: '#/components/schemas/Address'},\n BookingAgent: {$ref: '#/components/schemas/PartyAddress'},\n Shipper: {$ref: '#/components/schemas/PartyAddress'},\n ShipperShipper: {$ref: '#/components/schemas/PartyAddress'},\n OnBehalfOfShipper: {$ref: '#/components/schemas/PartyAddress'},\n OnBehalfOfShipperShipper: {$ref: '#/components/schemas/PartyAddress'},\n ShipperHBL: {$ref: '#/components/schemas/Address'},\n Consignee: {$ref: '#/components/schemas/PartyAddress'},\n OnBehalfOfConsignee: {$ref: '#/components/schemas/PartyAddress'},\n OnBehalfOfConsigneeShipper: {$ref: '#/components/schemas/PartyAddress'},\n ConsigneeShipper: {$ref: '#/components/schemas/PartyAddress'},\n ConsigneeHBL: {$ref: '#/components/schemas/Address'},\n Endorsee: {$ref: '#/components/schemas/PartyAddress'},\n EndorseeShipper: {$ref: '#/components/schemas/PartyAddress'},\n ServiceContractOwner: {$ref: '#/components/schemas/PartyAddress'},\n CarrierBookingOffice: {$ref: '#/components/schemas/Address'},\n NotifyParty: { $ref: '#/components/schemas/PartyAddress'},\n NotifyPartyShipper: { $ref: '#/components/schemas/PartyAddress'},\n NotifyPartyHBL: { $ref: '#/components/schemas/AddressHBL'},\n Seller: { $ref: '#/components/schemas/Address'},\n SellerHBL: { $ref: '#/components/schemas/AddressHBL'},\n Buyer: { $ref: '#/components/schemas/Address'},\n BuyerHBL: { $ref: '#/components/schemas/AddressHBL'},\n ShippingInstructionsRequestor: { $ref: '#/components/schemas/PartyAddress' },\n Party: {$ref: '#/components/schemas/PartyAddress'},\n PartyShipper: {$ref: '#/components/schemas/PartyAddress'},\n PartyHBL: {$ref: '#/components/schemas/Address'},\n CarriersAgentAtDestination: {$ref: '#/components/schemas/Address'},\n IssuingParty: {$ref: '#/components/schemas/PartyAddress'},\n EmptyContainerDepotReleaseLocation: {$ref: '#/components/schemas/Address'},\n ContainerPositioningLocation: {$ref: '#/components/schemas/Address'},\n TransportCallLocation: { $ref: '#/components/schemas/Address' }\n },\n },\n Address: {\n 'CS_v1.0.x' : { DEFAULT: { type: 'object', title: 'Address', required: ['street', 'city', 'countryCode'], CHILDREN: ['street', 'streetNumber', 'floor', 'postCode', 'city', 'stateRegion', 'countryCode'] } },\n DEFAULT : { type: 'object', title: 'Address', required: ['street', 'city', 'countryCode'], CHILDREN: ['street', 'streetNumber', 'floor', 'postCode', 'POBox', 'city', 'stateRegion', 'countryCode'] },\n },\n AddressHBL: {\n DEFAULT : { type: 'object', title: 'Address (House B/L)', required: ['street', 'city', 'countryCode'], CHILDREN: ['street', 'streetNumber', 'floor', 'postCode', 'POBox', 'city', 'stateRegion', 'countryCode'] },\n },\n addressLines: {\n DEFAULT : { type: 'array', maxItems: 5, items: { type: 'string', maxLength: 250 } },\n },\n AddressLocation: {\n 'OVS_v3.0.x' : { DEFAULT: { type: 'object', title: 'Address Location', required: ['address','locationType'], CHILDREN: ['locationName', 'locationType', 'address'] } },\n },\n advanceManifestFilings: {\n PARENTS : { CreateShippingInstructions: {}, UpdateShippingInstructions: {}, ShippingInstructions: {}, updatedShippingInstructions: {}, shippingInstructions: {}, Booking: {}, booking: {}, amendedBooking: {} },\n DEFAULT : { type: 'array', items: {$ref: '#/components/schemas/AdvanceManifestFiling'} },\n },\n AdvanceManifestFiling: {\n 'BKG_v2.0.x' : { DEFAULT: { required: ['manifestTypeCode'], CHILDREN: ['manifestTypeCode','countryCode'] } },\n DEFAULT : { type: 'object', title: 'Advance Manifest Filing', required: ['manifestTypeCode', 'advanceManifestFilingsHouseBLPerformedBy'], CHILDREN: ['manifestTypeCode','countryCode','advanceManifestFilingsHouseBLPerformedBy','selfFilerCode','identificationNumber'] },\n },\n advanceManifestFilingsHouseBLPerformedBy: {\n PARENTS : { AdvanceManifestFiling: {} },\n DEFAULT : { type: 'string', enum: ['SELF', 'CARRIER'] },\n },\n aftDraft: {\n DEFAULT : { type: 'number', format: 'float' },\n },\n airDraft: {\n DEFAULT : { type: 'number', format: 'float' },\n },\n airExchangeSetpoint: {\n PARENTS : { ActiveReeferSettings: {} },\n DEFAULT : { type: 'number', format: 'float', minimum: '0' },\n },\n airExchangeUnit: {\n PARENTS : { ActiveReeferSettings: {} },\n DEFAULT : { type: 'string', enum: ['MQH', 'FQH']},\n },\n amendedBooking: {\n DEFAULT : { $ref: '#/components/schemas/AmendedBookingFullNotification' },\n },\n AmendedBookingFullNotification: {\n DEFAULT : { type: 'object', title: 'Amended Booking', allOf: true },\n },\n amendedBookingStatus: {\n PARENTS : { Booking: {}, BookingRefStatus: {}, BookingRefCancelledStatus: {}, BookingNotificationData: {}, CancelBookingRequest: { pseudoEnum: [] } },\n DEFAULT : { type: 'string', maxLength: 50, pseudoEnum: ['AMENDMENT_RECEIVED','AMENDMENT_CONFIRMED','AMENDMENT_DECLINED','AMENDMENT_CANCELLED'] },\n },\n amendedTransportDocument: {\n PARENTS : { TransportDocumentData: {}, TransportDocumentAmend: { $ref: '#/components/schemas/TransportDocument' } },\n DEFAULT : { $ref: '#/components/schemas/AmendedTransportDocumentFullNotification' }\n },\n AmendedTransportDocumentFullNotification: {\n DEFAULT : { type: 'object', title: 'Amended Transport Document Full Notification', allOf: true },\n },\n amendedTransportDocumentStatus: {\n PARENTS : { TransportDocumentData: {}, TransportDocumentAmend: {} },\n DEFAULT : { type: 'string', maxLength: 50, pseudoEnum: ['AMENDMENT_RECEIVED','AMENDMENT_CONFIRMED','AMENDMENT_DECLINED','AMENDMENT_CANCELLED'] },\n },\n ApproveTransportDocument: {\n DEFAULT : { type: 'object', title: 'Approve Transport Document', required: ['transportDocumentStatus'], CHILDREN: ['transportDocumentStatus'] },\n },\n arrival: {\n DEFAULT : { $ref: '#/components/schemas/PlaceOfArrival' },\n },\n arrivalDateTime: {\n PARENTS : { IntermediateCall: {} },\n DEFAULT : { type: 'string', format: 'date-time'}\n },\n auditReference: {\n PARENTS : { EndorsementChainLink: {},Transaction: {} },\n DEFAULT : { type: 'string', maxLength: 100 },\n },\n barge: {\n DEFAULT : { $ref: '#/components/schemas/Barge' },\n },\n Barge: {\n DEFAULT : { type: 'object', title: 'Barge', CHILDREN: ['vesselIMONumber','MMSINumber','name','flag','callSign','operatorCarrierCode','operatorCarrierCodeListProvider'] },\n },\n BargeTransport: {\n DEFAULT : { type: 'object', title: 'Barge Transport', required: ['modeOfTransport'], CHILDREN: ['modeOfTransport','portVisitReference','transportCallReference','servicePartners','universalServiceReference','universalExportVoyageReference','universalImportVoyageReference','barge'] },\n },\n Booking: {\n DEFAULT : { type: 'object', title: 'Booking', required: ['bookingStatus', 'receiptTypeAtOrigin', 'deliveryTypeAtDestination', 'cargoMovementTypeAtOrigin', 'cargoMovementTypeAtDestination', 'isEquipmentSubstitutionAllowed', 'shipmentLocations', 'requestedEquipments', 'documentParties'] },\n },\n booking: {\n DEFAULT : { $ref: '#/components/schemas/BookingFullNotification' },\n },\n bookingAgent: {\n PARENTS : { DocumentParties: {}, DocumentPartiesReq: {} },\n DEFAULT : { $ref: '#/components/schemas/BookingAgent' },\n },\n BookingAgent: {\n DEFAULT : { type: 'object', title: 'Booking Agent', required: ['partyName'], CHILDREN: ['partyName', 'address','addressLines', 'partyContactDetails', 'identifyingCodes', 'taxLegalReferences','reference']},\n },\n BookingFullNotification: {\n DEFAULT : { type: 'object', title: 'Booking Full Notification', allOf: true },\n },\n bookingChannelReference: {\n PARENTS : { CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {} },\n DEFAULT : { type: 'string', maxLength: 20, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n BookingRefCancelledStatus: {\n DEFAULT : { type: 'object', title: 'Cancelled Booking Response', required: ['bookingStatus'] },\n },\n BookingRefStatus: {\n DEFAULT : { type: 'object', title: 'Booking Response', required: ['bookingStatus'] },\n },\n BookingNotification: {\n DEFAULT : { type: 'object', title: 'Booking Notification', required: ['specversion', 'id', 'source', 'type', 'time', 'datacontenttype', 'subscriptionReference', 'data'] },\n },\n BookingNotificationData: {\n DEFAULT : { type: 'object', title: 'Data', required: ['bookingStatus'], CHILDREN: ['bookingStatus', 'amendedBookingStatus', 'bookingCancellationStatus', 'carrierBookingRequestReference', 'carrierBookingReference', 'feedbacks', 'booking', 'amendedBooking'] },\n },\n bookingStatus: {\n PARENTS : { Booking: {}, booking: {}, amendedBooking: {}, BookingRefStatus: {}, BookingNotificationData: {}, CancelBookingRequest: { pseudoEnum: [] } },\n DEFAULT : { type: 'string', maxLength: 50, pseudoEnum: ['RECEIVED','PENDING_UPDATE','UPDATE_RECEIVED','CONFIRMED','PENDING_AMENDMENT','REJECTED','DECLINED','CANCELLED','COMPLETED'] },\n },\n bookingCancellationStatus: {\n PARENTS : { Booking: {}, booking: {}, amendedBooking: {}, BookingRefStatus: {}, BookingNotificationData: {}, CancelBookingRequest: { pseudoEnum: [] } },\n DEFAULT : { type: 'string', maxLength: 50, pseudoEnum: ['CANCELLATION_RECEIVED','CANCELLATION_DECLINED','CANCELLATION_CONFIRMED'] },\n },\n buyer: {\n PARENTS : { DocumentParties: {}, DocumentPartiesShippingInstructions: {}, DocumentPartiesHouseBL: { $ref: '#/components/schemas/BuyerHBL' } },\n DEFAULT : { $ref: '#/components/schemas/Buyer' },\n },\n Buyer: {\n DEFAULT : { type: 'object', title: 'Buyer', required: ['partyName', 'typeOfPerson'], CHILDREN: ['partyName','typeOfPerson','address','addressLines','identifyingCodes','taxLegalReferences','partyContactDetails'] },\n },\n BuyerHBL: {\n DEFAULT : { type: 'object', title: 'Buyer (House B/L)', required: ['partyName', 'typeOfPerson'], CHILDREN: ['partyName','typeOfPerson','address','identifyingCodes','taxLegalReferences','partyContactDetails'] },\n },\n calculationBasis: {\n PARENTS : { Charge: {} },\n DEFAULT : { type: 'string', maxLength: 50, pattern: '^\\\\S(?:.*\\\\S)?$'},\n },\n callSign: {\n PARENTS : { Vessel: {}, Barge: {} },\n DEFAULT : { type: 'string', maxLength: 10, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n cancel: {\n DEFAULT : { type: 'boolean' },\n },\n Cancel: {\n DEFAULT : { type: 'object', title: 'Cancel', CHILDREN: ['reason','isFYI'] },\n },\n cancelled: {\n PARENTS : { PortCallService: {} },\n DEFAULT : { type: 'boolean', readOnly: 'true', default: 'false' },\n },\n CancelBookingRequest: {\n DEFAULT : { type: 'object', title: 'Cancel Booking Request', CHILDREN: ['reason'] },\n },\n CancelShippingInstructionsUpdate: {\n DEFAULT : { type: 'object', title: 'Cancel Shipping Instructions or Updated Shipping Instructions', CHILDREN: ['updatedShippingInstructionsStatus', 'shippingInstructionsStatus'] },\n },\n cargoGrossVolume: {\n PARENTS : { CommodityShipper: {}, Commodity: {}, CargoItem: {}, CargoItemShipper: {} },\n DEFAULT : { $ref: '#/components/schemas/CargoGrossVolume' },\n },\n CargoGrossVolume: {\n DEFAULT : { type: 'object', title: 'Cargo Gross Volume', required: ['value','unit'], CHILDREN: ['value','unit'] },\n },\n cargoGrossWeight: {\n PARENTS : { CommodityShipper: {}, Commodity: {}, CargoItem: {}, CargoItemShipper: {}, CargoItemHBL: {}, RequestedEquipment: { $ref: '#/components/schemas/CargoGrossWeightReq' }, RequestedEquipmentShipper: { $ref: '#/components/schemas/CargoGrossWeightReq' } },\n DEFAULT : { $ref: '#/components/schemas/CargoGrossWeight' },\n },\n CargoGrossWeight: {\n DEFAULT : { type: 'object', title: 'Cargo Gross Weight', required: ['value','unit'], CHILDREN: ['value','unit'] },\n },\n CargoGrossWeightReq: {\n DEFAULT : { type: 'object', title: 'Cargo Gross Weight (Requested Equipment)', required: ['value','unit'], CHILDREN: ['value','unit'] },\n },\n cargoNetVolume: {\n PARENTS : { CommodityShipper: {}, Commodity: {}, CargoItem: {}, CargoItemShipper: {} },\n DEFAULT : { $ref: '#/components/schemas/CargoNetVolume' },\n },\n CargoNetVolume: {\n DEFAULT : { type: 'object', title: 'Cargo Net Volume', required: ['value','unit'], CHILDREN: ['value','unit'] },\n },\n cargoNetWeight: {\n PARENTS : { CommodityShipper: {}, Commodity: {}, CargoItem: {}, CargoItemShipper: {} },\n DEFAULT : { $ref: '#/components/schemas/CargoNetWeight' },\n },\n CargoNetWeight: {\n DEFAULT : { type: 'object', title: 'Cargo Net Weight', required: ['value','unit'], CHILDREN: ['value','unit'] },\n },\n CargoItem: {\n DEFAULT : { type: 'object', title: 'Cargo Item', required: ['equipmentReference', 'cargoGrossWeight', 'outerPackaging'], CHILDREN: ['equipmentReference','cargoGrossWeight','cargoGrossVolume','cargoNetWeight','cargoNetVolume', 'exportLicense', 'importLicense','outerPackaging','nationalCommodityCodes','extendedNationalCommodityCodes','customsReferences'] },\n },\n CargoItemHBL: {\n DEFAULT : { type: 'object', title: 'Cargo Item (House B/L)', required: ['equipmentReference', 'cargoGrossWeight', 'outerPackaging'], CHILDREN: ['equipmentReference','cargoGrossWeight','outerPackaging'] },\n },\n cargoItems: {\n PARENTS : {\n ConsignmentItemShipper: { items: {$ref: '#/components/schemas/CargoItemShipper' } },\n ConsignmentItem : { items: {$ref: '#/components/schemas/CargoItem' } },\n ConsignmentItemHBL : { items: {$ref: '#/components/schemas/CargoItemHBL' } },\n },\n DEFAULT : { type: 'array', minItems: 1 },\n },\n CargoItemShipper: {\n DEFAULT : {type: 'object', title: 'Cargo Item (Shipper)', required: ['equipmentReference', 'cargoGrossWeight'], CHILDREN: ['equipmentReference','cargoGrossWeight','cargoGrossVolume','cargoNetWeight','cargoNetVolume', 'exportLicense', 'importLicense','outerPackaging','nationalCommodityCodes','extendedNationalCommodityCodes','houseBillOfLadingReference','customsReferences'] },\n },\n cargoMovementTypeAtOrigin: {\n PARENTS : { CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {}, TransportDocument: {}, transportDocument: {} },\n DEFAULT : { type: 'string', maxLength: 3, pseudoEnum: ['FCL','LCL'] },\n },\n cargoMovementTypeAtDestination: {\n PARENTS : { CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {}, TransportDocument: {}, transportDocument: {} },\n DEFAULT : { type: 'string', maxLength: 3, pseudoEnum: ['FCL','LCL'] },\n },\n carrierBookingOffice: {\n 'BKG_v2.0.x' : { PARENTS: { DocumentParties: {}, DocumentPartiesReq: {} } },\n// 'BKG_v2.0.1' : { PARENTS: { DocumentParties: {}, DocumentPartiesReq: {} } },\n// 'BKG_v2.0.2' : { PARENTS: { DocumentParties: {}, DocumentPartiesReq: {} } },\n// 'BKG_v2.0.3' : { PARENTS: { DocumentParties: {}, DocumentPartiesReq: {} } },\n PARENTS : { documentParties: {} },\n DEFAULT : { $ref: '#/components/schemas/CarrierBookingOffice' },\n },\n CarrierBookingOffice: {\n DEFAULT : { type: 'object', title: 'Carrier Booking Office', required: ['partyName', 'UNLocationCode'], CHILDREN: ['partyName','UNLocationCode','address','addressLines','partyContactDetails'] },\n },\n carrierBookingRequestReference: {\n PARENTS : { CreateBookingResponse: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {}, BookingRefStatus: {}, BookingRefCancelledStatus: {}, BookingNotificationData: {} },\n DEFAULT : { type: 'string', maxLength: 100, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n carrierBookingReference: {\n PARENTS : { UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {}, BookingRefStatus: {}, BookingRefCancelledStatus: {}, ConsignmentItem: {}, ConsignmentItemShipper: {}, BookingNotificationData: {} },\n DEFAULT : { type: 'string', maxLength: 35, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n carrierClauses: {\n PARENTS : { Booking: {}, booking: {}, amendedBooking: {}, TransportDocument: {}, transportDocument: {} },\n DEFAULT : { type: 'array', items: { type: 'string', maxLength: 20000, pattern: '^\\\\S(?:.*\\\\S)?$'} },\n },\n carrierCode: {\n PARENTS : { Moves:{}, booking: {}, amendedBooking: {}, CreateBooking: {}, UpdateBooking: {}, Booking: {}, CreateShippingInstructions: {}, UpdateShippingInstructions: {}, ShippingInstructions: {}, TransportDocument: {}, transportDocument: {}, ServicePartner: {}, ServicePartnerSchedule: {} },\n DEFAULT : { type: 'string', maxLength: 4, pattern: '^\\\\S+$' },\n },\n carrierCodeListProvider: {\n PARENTS : { Moves:{}, booking: {}, amendedBooking: {}, CreateBooking: {}, UpdateBooking: {}, Booking: {}, CreateShippingInstructions: {}, UpdateShippingInstructions: {}, ShippingInstructions: {}, TransportDocument: {}, transportDocument: {}, ServicePartner: {}, ServicePartnerSchedule: {} },\n DEFAULT : { type: 'string', enum: ['SMDG', 'NMFTA'] },\n },\n carrierExportVoyageNumber: {\n 'OVS_v3.0.x' : { DEFAULT: { type: 'string', maxLength: 50, pattern: null } },\n PARENTS : { TerminalTimestamp: {}, CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {}, Transport: {}, VesselVoyage: {}, TerminalCall: {}, TransportCall: {}, ServicePartner: {}, ServicePartnerSchedule: {}, departingVesselVoyage: {} },\n DEFAULT : { type: 'string', maxLength: 50, pattern: '^\\\\S(?:.*\\\\S)?$'},\n },\n carrierImportVoyageNumber: {\n 'OVS_v3.0.x' : { DEFAULT: { type: 'string', maxLength: 50, pattern: null } },\n PARENTS : { TerminalTimestamp: {}, Transport: {}, TerminalCall: {}, TransportCall: {}, ServicePartner: {}, ServicePartnerSchedule: {} },\n DEFAULT : { type: 'string', maxLength: 50, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n carriersAgentAtDestination: {\n PARENTS : { DocumentParties: {} },\n DEFAULT : { $ref: '#/components/schemas/CarriersAgentAtDestination' },\n },\n CarriersAgentAtDestination: {\n DEFAULT : { type: 'object', title: 'Carrier\\'s Agent At Destination', required: ['partyName', 'address', 'partyContactDetails'], CHILDREN: ['partyName','address','addressLines','partyContactDetails'] },\n },\n carrierServiceCode: {\n 'OVS_v3.0.x' : { DEFAULT: { type: 'string', maxLength: 11, pattern:null } },\n PARENTS : { TerminalTimestamp: {}, TerminalCall: {}, CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {}, Transport: {}, ServiceSchedule: {}, ServicePartner: {}, ServicePartnerSchedule: {}, departingVesselVoyage: {} },\n DEFAULT : { type: 'string', maxLength: 11, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n carrierServiceName: {\n 'OVS_v3.0.x' : { DEFAULT: { type: 'string', maxLength: 50, pattern:null } },\n PARENTS : { TerminalTimestamp: {}, TerminalCall: {}, CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {}, ServiceSchedule: {}, ServicePartner: {}, ServicePartnerSchedule: {} },\n DEFAULT : { type: 'string', maxLength: 50, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n carrierSCACCode: {\n DEFAULT : { type: 'string', pattern: '^\\\\S+$', maxLength: 4 },\n },\n changeRemark: {\n 'OVS_v3.0.x' : { DEFAULT: { type: 'string', maxLength: 250 } },\n },\n Charge: {\n DEFAULT : { type: 'object', title: 'Charge', required: ['chargeName', 'currencyAmount', 'currencyCode', 'paymentTermCode', 'calculationBasis', 'unitPrice', 'quantity'], CHILDREN: ['chargeName', 'extendedChargeName','currencyAmount','currencyCode','paymentTermCode','calculationBasis','unitPrice','quantity'] },\n },\n chargeName: {\n PARENTS : { Charge: {} },\n DEFAULT : { type: 'string', maxLength: 50, pattern: '^\\\\S(?:.*\\\\S)?$', deprecated: true },\n },\n charges: {\n PARENTS : { Booking: {}, booking: {}, amendedBooking: {}, TransportDocument: {}, transportDocument: {} },\n DEFAULT : { type: 'array', items: {$ref: '#/components/schemas/Charge'}},\n },\n city: {\n 'OVS_v3.0.x' : { DEFAULT: { maxLength: 65, pattern: null } },\n PARENTS : { PortOfLoading: { type: null, maxLength: null, pattern: null, $ref: '#/components/schemas/City' }, PortOfDischarge: { type: null, maxLength: null, pattern: null, $ref: '#/components/schemas/City' }, address: {}, Address: {}, AddressHBL: {}, PartyAddress: {}, City: {} },\n DEFAULT : { type: 'string', maxLength: 35, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n City: {\n DEFAULT : { type: 'object', title: 'City', required: ['city', 'countryCode'], CHILDREN: ['city','stateRegion','countryCode'] },\n },\n classifierCode: {\n 'OVS_HUB_TER_v1.0.x' : { DEFAULT: { enum: ['ACT', 'EST'] } },\n PARENTS : { Timestamp: {} },\n DEFAULT : { type: 'string', enum: ['ACT', 'EST', 'PLN', 'REQ'], pseudoEnum: [] }, // No validation is done on description\n },\n co2: {\n PARENTS : { footprint: {}, solutionFootprint: {} },\n DEFAULT : { type: 'number', format: 'double' },\n },\n co2e: {\n PARENTS : { footprint: {}, solutionFootprint: {} },\n DEFAULT : { type: 'number', format: 'double' },\n },\n co2Setpoint: {\n PARENTS : { ActiveReeferSettings: {} },\n DEFAULT : { type: 'number', format: 'float', minimum: '0', maximum: 100 },\n },\n code: {\n PARENTS : { Feedback: {} },\n DEFAULT : { type: 'string', maxLength: 50, pseudoEnum: ['INFORMATIONAL_MESSAGE','PROPERTY_WILL_BE_IGNORED','PROPERTY_VALUE_MUST_CHANGE','PROPERTY_VALUE_HAS_BEEN_CHANGED','PROPERTY_VALUE_MAY_CHANGE','PROPERTY_HAS_BEEN_DELETED'] },\n },\n codedVariantList: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { type: 'string', minLength: 4, maxLength: 4, pattern: '^[0-3][0-9A-Z]{3}$' },\n },\n codeListName: {\n PARENTS : { IdentifyingCode: {}, identifyingCode: {} },\n DEFAULT : { type: 'string', maxLength: 100, pseudoEnum: ['DID','LEI','DUNS'] },\n },\n codeListProvider: {\n 'EBL_SUR_v3.0.x' : { DEFAULT: { pseudoEnum: ['WAVE','CARX','ESSD','IDT','BOLE','EDOX','IQAX','SECR','TRGO','ETEU','TRAC','BRIT','COVA','ETIT','KTNE','CRED','BLOC','DOCU','AEOT','SGTD','GSBN','WISE','GLEIF','W3C','DNB','FMC','DCSA','ZZZ','NONE'] } },\n 'BKG_v2.0.0' : { DEFAULT: { type: 'string', maxLength: 100, pseudoEnum: ['WAVE','CARX','ESSD','IDT','BOLE','EDOX','IQAX','SECR','TRGO','ETEU','TRAC','BRIT','GSBN','WISE','GLEIF','W3C','DNB','FMC','DCSA','ZZZ'] } },\n 'BKG_v2.0.1' : { DEFAULT: { type: 'string', maxLength: 100, pseudoEnum: ['WAVE','CARX','ESSD','IDT','BOLE','EDOX','IQAX','SECR','TRGO','ETEU','TRAC','BRIT','GSBN','WISE','GLEIF','W3C','DNB','FMC','DCSA','ZZZ'] } },\n PARENTS : { IdentifyingCode: {} },\n DEFAULT : { type: 'string', maxLength: 100, pseudoEnum: ['WAVE','CARX','ESSD','IDT','BOLE','EDOX','IQAX','SECR','TRGO','ETEU','TRAC','BRIT','COVA','ETIT','KTNE','CRED','BLOC','DOCU','AEOT','SGTD','GSBN','WISE','GLEIF','W3C','DNB','FMC','DCSA','ZZZ'] },\n },\n comments: {\n PARENTS : { SurrenderRequestAnswer: {}, SurrenderRequestDetails: {}, Transaction: {} },\n DEFAULT : { type: 'string', maxLength: 255, pattern: '^\\\\S(?:.*\\\\S)?$'},\n },\n commodities: {\n PARENTS : { RequestedEquipment: { items: { $ref: '#/components/schemas/Commodity' } }, RequestedEquipmentShipper: { items: { $ref: '#/components/schemas/CommodityShipper' } } },\n DEFAULT : { type: 'array' },\n },\n CommodityShipper: {\n DEFAULT : { type: 'object', title: 'Commodity (Shipper)', required: ['commodityType'], CHILDREN: ['commodityType','HSCodes','extendedHSCodes','nationalCommodityCodes','extendedNationalCommodityCodes','cargoGrossWeight','cargoGrossVolume','cargoNetWeight','cargoNetVolume','exportLicense','importLicense','outerPackaging','references','customsReferences'] },\n },\n Commodity: {\n DEFAULT : { type: 'object', title: 'Commodity', required: ['commodityType'], CHILDREN: ['commoditySubReference', 'commodityType','HSCodes','extendedHSCodes','nationalCommodityCodes','extendedNationalCommodityCodes','cargoGrossWeight','cargoGrossVolume','cargoNetWeight','cargoNetVolume','exportLicense','importLicense','outerPackaging','references','customsReferences'] },\n },\n commoditySubReference: {\n PARENTS : { Commodity: {}, ConsignmentItemShipper: {} },\n DEFAULT : { type: 'string', maxLength: 100, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n commodityType: {\n PARENTS : { CommodityShipper: {}, Commodity: {} },\n DEFAULT : { type: 'string', maxLength: 550, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n competentAuthorityApproval: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { type: 'string', maxLength: 70, pattern:'^\\\\S(?:.*\\\\S)?$' },\n },\n confirmedEquipments: {\n PARENTS : { Booking: {}, booking: {}, amendedBooking: {} },\n DEFAULT : { type: 'array', items: { $ref: '#/components/schemas/ConfirmedEquipment' } },\n },\n ConfirmedEquipment: {\n 'BKG_v2.0.0' : { DEFAULT: { type: 'object', title: 'Confirmed Equipment', required: ['ISOEquipmentCode', 'units'], CHILDREN: ['ISOEquipmentCode','units','containerPositionings','emptyContainerPickup'] } },\n 'BKG_v2.0.1' : { DEFAULT: { type: 'object', title: 'Confirmed Equipment', required: ['ISOEquipmentCode', 'units'], CHILDREN: ['ISOEquipmentCode','units','containerPositionings','emptyContainerPickup'] } },\n DEFAULT : { type: 'object', title: 'Confirmed Equipment', required: ['ISOEquipmentCode', 'units'], CHILDREN: ['ISOEquipmentCode','units','containerPositionings','emptyContainerPickup','originEmptyContainerPickup'] },\n },\n consignee: {\n 'BKG_v2.0.x' : { PARENTS: { DocumentParties: {}, DocumentPartiesReq: {} } },\n// 'BKG_v2.0.1' : { PARENTS: { DocumentParties: {}, DocumentPartiesReq: {} } },\n// 'BKG_v2.0.2' : { PARENTS: { DocumentParties: {}, DocumentPartiesReq: {} } },\n// 'BKG_v2.0.3' : { PARENTS: { DocumentParties: {}, DocumentPartiesReq: {} } },\n PARENTS : { DocumentParties: {}, DocumentPartiesShippingInstructions: { $ref: '#/components/schemas/ConsigneeShipper' }, DocumentPartiesHouseBL: {$ref: '#/components/schemas/ConsigneeHBL'} },\n DEFAULT : { $ref: '#/components/schemas/Consignee' },\n },\n Consignee: {\n 'BKG_v2.0.x' : { DEFAULT: { required: ['partyName'], CHILDREN: ['partyName','eblPlatform','address','addressLines','partyContactDetails','identifyingCodes','taxLegalReferences','reference','purchaseOrderReferences', 'isNotifyParty'] } },\n// 'BKG_v2.0.1' : { DEFAULT: { required: ['partyName'], CHILDREN: ['partyName','address','partyContactDetails','identifyingCodes','taxLegalReferences','reference','purchaseOrderReferences'] } },\n// 'BKG_v2.0.2' : { DEFAULT: { required: ['partyName'], CHILDREN: ['partyName','address','partyContactDetails','identifyingCodes','taxLegalReferences','reference','purchaseOrderReferences'] } },\n// 'BKG_v2.0.3' : { DEFAULT: { required: ['partyName'], CHILDREN: ['partyName','address','partyContactDetails','identifyingCodes','taxLegalReferences','reference','purchaseOrderReferences'] } },\n DEFAULT : { type: 'object', title: 'Consignee', required: ['partyName','identifyingCodes'], CHILDREN: ['partyName','eblPlatform','typeOfPerson','address','addressLines','displayedAddress','identifyingCodes','taxLegalReferences','partyContactDetails','reference','purchaseOrderReferences', 'isNotifyParty'] },\n },\n ConsigneeShipper: {\n DEFAULT : { type: 'object', title: 'Consignee (Shipper provided)', required: ['partyName'], CHILDREN: ['partyName','eblPlatform','typeOfPerson','address','addressLines','displayedAddress','identifyingCodes','taxLegalReferences','partyContactDetails','reference','purchaseOrderReferences', 'isNotifyParty'] },\n },\n ConsigneeHBL: {\n DEFAULT : { type: 'object', title: 'Consignee (House B/L)', required: ['partyName', 'typeOfPerson'], CHILDREN: ['partyName','typeOfPerson','address','identifyingCodes','taxLegalReferences','partyContactDetails'] },\n },\n consignmentItems: {\n PARENTS : {HouseBillOfLading: { items: { $ref: '#/components/schemas/ConsignmentItemHBL' } }, CreateShippingInstructions: { items: { $ref: '#/components/schemas/ConsignmentItemShipper' } }, UpdateShippingInstructions: { items: { $ref: '#/components/schemas/ConsignmentItemShipper' } }, ShippingInstructions: { items: { $ref: '#/components/schemas/ConsignmentItemShipper' } }, shippingInstructions: { items: { $ref: '#/components/schemas/ConsignmentItemShipper' } }, updatedShippingInstructions: { items: { $ref: '#/components/schemas/ConsignmentItemShipper' } }, TransportDocument: { items: { $ref: '#/components/schemas/ConsignmentItem' } }, transportDocument: { items: { $ref: '#/components/schemas/ConsignmentItem' } } },\n DEFAULT : { type: 'array', minItems: 1 },\n },\n// ConsignmentItem: {\n// DEFAULT : { type: 'object', title: 'Consignment Item', required: ['carrierBookingReference', 'descriptionOfGoods', 'HSCodes'], CHILDREN: ['carrierBookingReference','descriptionOfGoods','HSCodes','shippingMarks','references','customsReferences'] },\n// },\n ConsignmentItem: {\n DEFAULT : { type: 'object', title: 'Consignment Item', required: ['carrierBookingReference', 'descriptionOfGoods', 'HSCodes', 'cargoItems'], CHILDREN: ['carrierBookingReference','descriptionOfGoods','HSCodes','extendedHSCodes','nationalCommodityCodes','extendedNationalCommodityCodes','shippingMarks','cargoItems', 'exportLicense', 'importLicense', 'references','customsReferences'] },\n },\n ConsignmentItemShipper: {\n DEFAULT : { type: 'object', title: 'Consignment Item (Shipper)', required: ['carrierBookingReference', 'descriptionOfGoods', 'HSCodes', 'cargoItems'], CHILDREN: ['carrierBookingReference','commoditySubReference', 'descriptionOfGoods','descriptionOfGoodsForCustoms','HSCodes','extendedHSCodes','nationalCommodityCodes','extendedNationalCommodityCodes','shippingMarks','shippingMarksForCustoms','cargoItems', 'exportLicense', 'importLicense','references','customsReferences'], allOf: true },\n },\n ConsignmentItemHBL: {\n DEFAULT : { type: 'object', title: 'Consignment Item (House B/L)', required: ['descriptionOfGoods', 'cargoItems', 'nationalCommodityCode'], CHILDREN: ['descriptionOfGoods','nationalCommodityCode','extendedNationalCommodityCodes','cargoItems','customsReferences'] },\n },\n contact: {\n PARENTS : { EmergencyContactDetails: {} },\n DEFAULT : { type: 'string', maxLength: 255 },\n },\n ContainerUnits: {\n DEFAULT : { type: 'object', title: 'Container Units', required: ['_20_units', '_40_units', '_45_units'], CHILDREN: ['_20_units', '_40_units', '_45_units'] },\n },\n ContainerPositioning: {\n DEFAULT : { type: 'object', title: 'Container Positioning', required: ['location'], CHILDREN: ['dateTime', 'location' ] },\n },\n ContainerPositioningEstimated: {\n DEFAULT : { type: 'object', title: 'Container Positioning Estimated', required: ['location'], CHILDREN: ['estimatedDateTime', 'location' ] },\n },\n containerPositionings : {\n PARENTS : { RequestedEquipment: {}, RequestedEquipmentShipper: {}, ConfirmedEquipment: { items: { $ref: '#/components/schemas/ContainerPositioningEstimated' } }},\n DEFAULT : { type: 'array', items: { $ref: '#/components/schemas/ContainerPositioning' } },\n },\n ContainerPositioningLocation: {\n DEFAULT : { type: 'object', title: 'Container Positioning Location', CHILDREN: ['locationName', 'facilityName', 'address','addressLines', 'facility','UNLocationCode','geoCoordinate' ] },\n },\n ContainerRestows: {\n DEFAULT : { type: 'object', title: 'Container units to restow', required: ['_20_units', '_40_units', '_45_units'], CHILDREN: ['_20_units', '_40_units', '_45_units'] },\n },\n content: {\n PARENTS : { SupportingDocument: {} },\n DEFAULT : { type: 'string', format: 'byte' },\n },\n contentType: {\n PARENTS : { SupportingDocument: {} },\n DEFAULT : { type: 'string', maxLength: 100, default: 'application/pdf' },\n },\n contractQuotationReference: {\n PARENTS : { CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {}, TransportDocument: {}, transportDocument: {} },\n DEFAULT : { type: 'string', maxLength: 35, pattern: '^\\\\S(?:.*\\\\S)?$', deprecated: true },\n },\n controlTrackingRegistry: {\n DEFAULT : { type: 'string', maxLength: 1024, format: 'uri' },\n },\n country: {\n 'OVS_v3.0.x' : { DEFAULT: { type: 'string', maxLength: 75 } },\n },\n countryCode: {\n PARENTS : { PlaceOfAcceptance: {}, PlaceOfFinalDelivery: {}, PlaceOfBLIssue: {}, PlaceOfIssue: {}, address: {}, City: {}, Address: {}, AddressHBL: {}, PartyAddress: {}, AdvanceManifestFiling: {}, TaxLegalReference: {}, CustomsReference: {}, NationalCommodityCode: {}, ExtendedNationalCommodityCode: {} },\n DEFAULT : { type: 'string', maxLength: 2, minLength: 2, pattern: '^[A-Z]{2}$' },\n },\n CreateBooking: {\n DEFAULT : { type: 'object', title: 'Create Booking', required: ['receiptTypeAtOrigin', 'deliveryTypeAtDestination', 'cargoMovementTypeAtOrigin', 'cargoMovementTypeAtDestination', 'isEquipmentSubstitutionAllowed', 'shipmentLocations', 'requestedEquipments', 'documentParties'] },\n },\n CreateBookingResponse: {\n DEFAULT : { type: 'object', title: 'Create Booking Response', required: ['carrierBookingRequestReference'], CHILDREN: ['carrierBookingRequestReference'] },\n },\n CreateShippingInstructions: {\n DEFAULT : { type: 'object', title: 'Create Shipping Instructions', required: ['transportDocumentTypeCode', 'isShippedOnBoardType', 'isElectronic', 'isToOrder', 'freightPaymentTermCode', 'partyContactDetails', 'documentParties', 'isCargoDeliveredInICS2Zone', 'consignmentItems', 'utilizedTransportEquipments'] },\n },\n CreateShippingInstructionsResponse: {\n DEFAULT : { type: 'object', title: 'Create Shipping Instructions Response', required: ['shippingInstructionsReference'], CHILDREN: ['shippingInstructionsReference'] },\n },\n currencyAmount: {\n PARENTS : { Charge: {} },\n DEFAULT : { type: 'number', format: 'float', minimum: '0' },\n },\n currencyCode: {\n PARENTS : { Charge: {} },\n DEFAULT : { type: 'string', pattern: '^[A-Z]{3}$', minLength: 3, maxLength: 3 },\n },\n CustomsReference: {\n DEFAULT : { type: 'object', title: 'Customs Reference', required: ['type', 'countryCode', 'values'], CHILDREN: ['type','countryCode','values'] },\n },\n customsReferences: {\n PARENTS : { CreateShippingInstructions: {}, UpdateShippingInstructions: {}, ShippingInstructions: {}, CreateBooking: {}, UpdateBooking: {}, Booking: {}, ConsignmentItem: {}, ConsignmentItemShipper: {}, ConsignmentItemHBL: {}, CargoItemCarrier: {}, CargoItemShipper: {}, UtilizedTransportEquipmentCarrier: {}, UtilizedTransportEquipmentShipper: {}, TransportDocument: {}, transportDocument: {}, UtilizedTransportEquipment: {}, CargoItem: {}, RequestedEquipment: {}, RequestedEquipmentShipper: {}, Commodity: {}, CommodityShipper: {} },\n DEFAULT : { type: 'array', items: { $ref: '#/components/schemas/CustomsReference' } },\n },\n cutOffDateTime: {\n PARENTS : { ShipmentCutOffTime: {}, CutOffTime: {} },\n DEFAULT : { type: 'string', format: 'date-time' },\n },\n cutOffDateTimeCode: {\n PARENTS : { ShipmentCutOffTime: { pseudoEnum: ['DCO','VCO','FCO','LCO','EFC'] }, CutOffTime: { pseudoEnum: ['DCO','VCO','FCO','LCO','PCO','ECP','EFC','RCO','DGC','OBC','TCO','STA','SPA','CUA','AFC'] } },\n DEFAULT : { type: 'string', maxLength: 3 },\n },\n CutOffTime: {\n DEFAULT : { type: 'object', title: 'Cut-Off Time', required: ['cutOffDateTimeCode', 'cutOffDateTime'], CHILDREN: ['cutOffDateTimeCode','cutOffDateTime'] },\n },\n cutOffTimes: {\n PARENTS : { PointToPoint: {}, Leg: {}, Schedule: {}, TransportCall: {} },\n DEFAULT : { type: 'array', items: {$ref: '#/components/schemas/CutOffTime'} },\n },\n dangerousGoods: {\n PARENTS : { OuterPackaging: {}, OuterPackagingCarrier: {} },\n DEFAULT : { type: 'array', items: { $ref: '#/components/schemas/DangerousGoods' } },\n },\n DangerousGoods: {\n 'BKG_v2.0.x' : { DEFAULT: { required: ['properShippingName', 'imoClass', 'isMarinePollutant', 'isLimitedQuantity', 'isExceptedQuantity', 'isSalvagePackings', 'isEmptyUncleanedResidue', 'isWaste', 'isHot', 'isCompetentAuthorityApprovalRequired', 'isReportableQuantity', 'emergencyContactDetails', 'grossWeight'], CHILDREN: ['codedVariantList','properShippingName','technicalName','imoClass','subsidiaryRisk1','subsidiaryRisk2','isMarinePollutant','packingGroup','isLimitedQuantity','isExceptedQuantity','isSalvagePackings','isEmptyUncleanedResidue','isWaste','isHot','isCompetentAuthorityApprovalRequired','competentAuthorityApproval','segregationGroups','innerPackagings','emergencyContactDetails','EMSNumber','endOfHoldingTime','fumigationDateTime','isReportableQuantity','inhalationZone','grossWeight','netWeight','netExplosiveContent','netVolume','limits','specialCertificateNumber','additionalContainerCargoHandling'] } },\n// 'BKG_v2.0.1' : { DEFAULT: { required: ['properShippingName', 'imoClass', 'isMarinePollutant', 'isLimitedQuantity', 'isExceptedQuantity', 'isSalvagePackings', 'isEmptyUncleanedResidue', 'isWaste', 'isHot', 'isCompetentAuthorityApprovalRequired', 'isReportableQuantity', 'emergencyContactDetails', 'grossWeight'], CHILDREN: ['codedVariantList','properShippingName','technicalName','imoClass','subsidiaryRisk1','subsidiaryRisk2','isMarinePollutant','packingGroup','isLimitedQuantity','isExceptedQuantity','isSalvagePackings','isEmptyUncleanedResidue','isWaste','isHot','isCompetentAuthorityApprovalRequired','competentAuthorityApproval','segregationGroups','innerPackagings','emergencyContactDetails','EMSNumber','endOfHoldingTime','fumigationDateTime','isReportableQuantity','inhalationZone','grossWeight','netWeight','netExplosiveContent','netVolume','limits','specialCertificateNumber','additionalContainerCargoHandling'] } },\n// 'BKG_v2.0.2' : { DEFAULT: { required: ['properShippingName', 'imoClass', 'isMarinePollutant', 'isLimitedQuantity', 'isExceptedQuantity', 'isSalvagePackings', 'isEmptyUncleanedResidue', 'isWaste', 'isHot', 'isCompetentAuthorityApprovalRequired', 'isReportableQuantity', 'emergencyContactDetails', 'grossWeight'], CHILDREN: ['codedVariantList','properShippingName','technicalName','imoClass','subsidiaryRisk1','subsidiaryRisk2','isMarinePollutant','packingGroup','isLimitedQuantity','isExceptedQuantity','isSalvagePackings','isEmptyUncleanedResidue','isWaste','isHot','isCompetentAuthorityApprovalRequired','competentAuthorityApproval','segregationGroups','innerPackagings','emergencyContactDetails','EMSNumber','endOfHoldingTime','fumigationDateTime','isReportableQuantity','inhalationZone','grossWeight','netWeight','netExplosiveContent','netVolume','limits','specialCertificateNumber','additionalContainerCargoHandling'] } },\n// 'BKG_v2.0.3' : { DEFAULT: { required: ['properShippingName', 'imoClass', 'isMarinePollutant', 'isLimitedQuantity', 'isExceptedQuantity', 'isSalvagePackings', 'isEmptyUncleanedResidue', 'isWaste', 'isHot', 'isCompetentAuthorityApprovalRequired', 'isReportableQuantity', 'emergencyContactDetails', 'grossWeight'], CHILDREN: ['codedVariantList','properShippingName','technicalName','imoClass','subsidiaryRisk1','subsidiaryRisk2','isMarinePollutant','packingGroup','isLimitedQuantity','isExceptedQuantity','isSalvagePackings','isEmptyUncleanedResidue','isWaste','isHot','isCompetentAuthorityApprovalRequired','competentAuthorityApproval','segregationGroups','innerPackagings','emergencyContactDetails','EMSNumber','endOfHoldingTime','fumigationDateTime','isReportableQuantity','inhalationZone','grossWeight','netWeight','netExplosiveContent','netVolume','limits','specialCertificateNumber','additionalContainerCargoHandling'] } },\n DEFAULT : { type: 'object', title: 'Dangerous Goods', oneOf: true, required: ['properShippingName', 'imoClass'], CHILDREN: ['codedVariantList','properShippingName','technicalName','imoClass','subsidiaryRisk1','subsidiaryRisk2','isMarinePollutant','packingGroup','isLimitedQuantity','isExceptedQuantity','isSalvagePackings','isEmptyUncleanedResidue','isWaste','isHot','isCompetentAuthorityApprovalRequired','competentAuthorityApproval','segregationGroups','innerPackagings','emergencyContactDetails','EMSNumber','endOfHoldingTime','fumigationDateTime','isReportableQuantity','inhalationZone','grossWeight','netWeight','netExplosiveContent','netVolume','limits'] },\n },\n data: {\n PARENTS : { BookingNotification: { $ref: '#/components/schemas/BookingNotificationData' }, ShippingInstructionsNotification: { $ref: '#/components/schemas/ShippingInstructionsData' }, TransportDocumentNotification: { $ref: '#/components/schemas/TransportDocumentData' } },\n DEFAULT : { type: 'object', title: 'Data' },\n },\n datacontenttype: {\n PARENTS : DCSA_CLOUDEVENT_GROUP,\n DEFAULT : { type: 'string', enum: ['application/json'], pseudoEnum: [] },\n },\n dateTime: {\n PARENTS : { Timestamp: {}, PlaceOfReceipt: {}, ContainerPositioning: {}, EmptyContainerPickup: {}, OriginEmptyContainerPickup: {}, PlaceOfDelivery: {}, PlaceOfArrival: {}, PlaceOfDeparture: {} },\n DEFAULT : { type: 'string', format: 'date-time'}\n },\n declaredValue: {\n PARENTS : { CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {}, TransportDocument: {}, transportDocument: {} },\n DEFAULT : { type: 'number', format: 'float', minimum: '0' },\n },\n declaredValueCurrency: {\n PARENTS : { CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {}, TransportDocument: {}, transportDocument: {} },\n DEFAULT : { type: 'string', minLength: 3, maxLength: 3, pattern: '^[A-Z]{3}$' },\n },\n decline: {\n DEFAULT : { type: 'boolean' },\n },\n Decline: {\n DEFAULT : { type: 'object', title: 'Decline', CHILDREN: ['reason','isFYI'] },\n },\n declined: {\n PARENTS : { PortCallService: {} },\n DEFAULT : { type: 'boolean', readOnly: 'true', default: 'false' },\n },\n delayReasonCode: {\n 'OVS_v3.0.x' : { DEFAULT: { deprecated: true } },\n DEFAULT : { type: 'string', maxLength: 3 },\n },\n delayReasonCodes: {\n DEFAULT : { type: 'array', items: { type: 'string', maxLength: 3} },\n },\n deliveryTypeAtDestination: {\n PARENTS : { CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {}, TransportDocument: {}, transportDocument: {}, PointToPoint: {} },\n DEFAULT : { type: 'string', maxLength: 3, enum: ['CY', 'SD', 'CFS'] },\n },\n departingVesselVoyage: {\n PARENTS : { ShipmentLocation: {} },\n DEFAULT : { type: 'object', title: \"Vessel Voyage\" },\n },\n departure: {\n DEFAULT : { $ref: '#/components/schemas/PlaceOfDeparture' },\n },\n departureDateTime: {\n PARENTS : { IntermediateCall: {} },\n DEFAULT : { type: 'string', format: 'date-time'}\n },\n depotReleaseLocation: {\n DEFAULT : { $ref: '#/components/schemas/EmptyContainerDepotReleaseLocation' },\n },\n description: {\n PARENTS : { OuterPackaging: {}, InnerPackaging: {}, OuterPackagingShipper: {} },\n DEFAULT : { type: 'string', maxLength: 100 },\n },\n descriptionOfGoods: {\n PARENTS : { ConsignmentItem: {}, ConsignmentItemShipper: {}, ConsignmentItemHBL: { type: 'string', maxItems: null, maxLength: 512, items: null, pattern: '^\\\\S(?:.*\\\\S)?$'} },\n DEFAULT : { type: 'array', maxItems: 150, items: { type: 'string', maxLength: 35, pattern: '^\\\\S(?:.*\\\\S)?$' } },\n },\n descriptionOfGoodsForCustoms: {\n PARENTS : { ConsignmentItemShipper: {} },\n DEFAULT : { type: 'array', maxItems: 150, items: { type: 'string', maxLength: 35 } },\n },\n destinationChargesPaymentTerm: {\n PARENTS : { CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {}, CreateShippingInstructions: {}, UpdateShippingInstructions: {}, ShippingInstructions: {}, updatedShippingInstructions: {}, shippingInstructions: {} },\n DEFAULT : { $ref: '#/components/schemas/DestinationChargesPaymentTerm' },\n },\n DestinationChargesPaymentTerm: {\n DEFAULT : { type: 'object', title: 'Destination Charges Payment Term', CHILDREN: ['haulageChargesPaymentTermCode','portChargesPaymentTermCode','otherChargesPaymentTermCode'] },\n },\n DetailedError: {\n 'OVS_v3.0.x' : { DEFAULT: { required: ['errorCodeText'], CHILDREN: ['errorCode','property','value','jsonPath','errorCodeText','erorCodeMessage'] } },\n DEFAULT : { type: 'object', title: 'Detailed Error', required: ['errorCodeText', 'errorCodeMessage'], CHILDREN: ['errorCode','property','value','jsonPath','errorCodeText','errorCodeMessage'] },\n },\n dimensionUnit: {\n DEFAULT : { type: 'string', enum: ['MTR', 'FOT'] },\n },\n dischargeLocation: {\n PARENTS : {Transport: {$ref:'#/components/schemas/DischargeLocation' } },\n },\n DischargeLocation: {\n DEFAULT : { type: 'object', title: 'Discharge Location', CHILDREN: ['locationName', 'facilityName', 'address','addressLines', 'facility', 'UNLocationCode'] },\n },\n dischargeUnits: {\n DEFAULT : { $ref: '#/components/schemas/DischargeUnits' }\n },\n DischargeUnits: {\n DEFAULT : { type: 'object', title: 'Discharge Units', CHILDREN: ['ladenContainerUnits','emptyContainerUnits','reeferPluggedContainerUnits','oogUnits'] },\n },\n displayedAddress: {\n PARENTS : { Shipper: {}, ShipperShipper: {}, Consignee: {}, ConsigneeShipper: {}, Endorsee: {}, EndorseeShipper: {}, NotifyParty: {}, NotifyPartyShipper: {} },\n DEFAULT : { type: 'array', maxItems: 6, items: { type: 'string', maxLength: 35 } },\n },\n displayedNameForPlaceOfDelivery: {\n PARENTS : { CreateShippingInstructions: {}, UpdateShippingInstructions: {}, ShippingInstructions: {}, updatedShippingInstructions: {}, shippingInstructions: {}, TransportDocument: {}, transportDocument: {} },\n DEFAULT : { type: 'array', maxItems: 5, items: { type: 'string', maxLength: 35 } },\n },\n displayedNameForPlaceOfReceipt: {\n PARENTS : { CreateShippingInstructions: {}, UpdateShippingInstructions: {}, ShippingInstructions: {}, updatedShippingInstructions: {}, shippingInstructions: {}, TransportDocument: {}, transportDocument: {} },\n DEFAULT : { type: 'array', maxItems: 5, items: { type: 'string', maxLength: 35 } },\n },\n displayedNameForPortOfDischarge: {\n PARENTS : { CreateShippingInstructions: {}, UpdateShippingInstructions: {}, ShippingInstructions: {}, updatedShippingInstructions: {}, shippingInstructions: {}, TransportDocument: {}, transportDocument: {} },\n DEFAULT : { type: 'array', maxItems: 5, items: { type: 'string', maxLength: 35 } },\n },\n displayedNameForPortOfLoad: {\n PARENTS : { CreateShippingInstructions: {}, UpdateShippingInstructions: {}, ShippingInstructions: {}, updatedShippingInstructions: {}, shippingInstructions: {}, TransportDocument: {}, transportDocument: {} },\n DEFAULT : { type: 'array', maxItems: 5, items: { type: 'string', maxLength: 35 } },\n },\n displayedShippedOnBoardReceivedForShipment: {\n DEFAULT : { type: 'string', pattern: '^\\\\S(?:.*\\\\S)?$', maxLength: 250 },\n },\n document: {\n PARENTS : { IssuanceRequest: {} },\n DEFAULT : { $ref: '#/components/schemas/TransportDocument' },\n },\n documentChecksum: {\n DEFAULT : { type: 'string', pattern: '^[0-9a-f]+$', maxLength: 64, minLength: 64, $ref: '#/components/schemas/DocumentChecksum' },\n },\n DocumentChecksum: {\n DEFAULT : { type: 'string', pattern: '^[0-9a-f]+$', maxLength: 64, minLength: 64 },\n },\n DocumentMetadata: {\n DEFAULT : { type: 'object', title: 'Document Metadata', required: ['name','size','mediaType','documentChecksum'], CHILDREN: ['name','size','mediaType','documentChecksum'] },\n },\n documentParties: {\n 'BKG_v2.0.x' : { PARENTS: {Booking: { $ref: '#/components/schemas/DocumentParties' }, booking: { $ref: '#/components/schemas/DocumentParties' }, amendedBooking: { $ref: '#/components/schemas/DocumentParties' }, CreateBooking: { $ref: '#/components/schemas/DocumentPartiesReq' }, UpdateBooking: {$ref: '#/components/schemas/DocumentPartiesReq'} } },\n// 'BKG_v2.0.1' : { PARENTS: {Booking: { $ref: '#/components/schemas/DocumentParties' }, booking: { $ref: '#/components/schemas/DocumentParties' }, amendedBooking: { $ref: '#/components/schemas/DocumentParties' }, CreateBooking: { $ref: '#/components/schemas/DocumentPartiesReq' }, UpdateBooking: {$ref: '#/components/schemas/DocumentPartiesReq'} } },\n// 'BKG_v2.0.2' : { PARENTS: {Booking: { $ref: '#/components/schemas/DocumentParties' }, booking: { $ref: '#/components/schemas/DocumentParties' }, amendedBooking: { $ref: '#/components/schemas/DocumentParties' }, CreateBooking: { $ref: '#/components/schemas/DocumentPartiesReq' }, UpdateBooking: {$ref: '#/components/schemas/DocumentPartiesReq'} } },\n// 'BKG_v2.0.3' : { PARENTS: {Booking: { $ref: '#/components/schemas/DocumentParties' }, booking: { $ref: '#/components/schemas/DocumentParties' }, amendedBooking: { $ref: '#/components/schemas/DocumentParties' }, CreateBooking: { $ref: '#/components/schemas/DocumentPartiesReq' }, UpdateBooking: {$ref: '#/components/schemas/DocumentPartiesReq'} } },\n PARENTS : { CreateShippingInstructions: { $ref: '#/components/schemas/DocumentPartiesShippingInstructions' }, UpdateShippingInstructions: { $ref: '#/components/schemas/DocumentPartiesShippingInstructions' }, ShippingInstructions: { $ref: '#/components/schemas/DocumentPartiesShippingInstructions' }, TransportDocument: { }, HouseBillOfLading: { $ref: '#/components/schemas/DocumentPartiesHouseBL' } },\n DEFAULT : { $ref: '#/components/schemas/DocumentParties' },\n },\n DocumentParties: {\n 'BKG_v2.0.x' : { DEFAULT: { required: null, CHILDREN: ['bookingAgent','shipper','consignee','serviceContractOwner','carrierBookingOffice','issueTo','other'] } },\n// 'BKG_v2.0.1' : { DEFAULT: { required: null, CHILDREN: ['bookingAgent','shipper','consignee','serviceContractOwner','carrierBookingOffice','other'] } },\n// 'BKG_v2.0.2' : { DEFAULT: { required: null, CHILDREN: ['bookingAgent','shipper','consignee','serviceContractOwner','carrierBookingOffice','other'] } },\n// 'BKG_v2.0.3' : { DEFAULT: { required: null, CHILDREN: ['bookingAgent','shipper','consignee','serviceContractOwner','carrierBookingOffice','other'] } },\n DEFAULT : { type: 'object', title: 'Document Parties', required: ['shipper','issuingParty'], CHILDREN: ['shipper','onBehalfOfShipper','consignee','onBehalfOfConsignee','endorsee','issuingParty','carriersAgentAtDestination','notifyParties','other'] },\n },\n DocumentPartiesReq: {\n DEFAULT : { type: 'object', title: 'Document Parties (Shipper)', required: ['bookingAgent'], CHILDREN: ['bookingAgent','shipper','consignee','serviceContractOwner','carrierBookingOffice','issueTo','other'] },\n },\n DocumentPartiesHouseBL: {\n DEFAULT : { type: 'object', title: 'Document Parties (House B/L)', required: ['shipper'], CHILDREN: ['shipper','consignee','notifyParty','seller','buyer','other'] },\n },\n DocumentPartiesShippingInstructions: {\n DEFAULT : { type: 'object', title: 'Document Parties (Shipping Instructions)', required: ['shipper'], CHILDREN: ['shipper','onBehalfOfShipper','consignee','onBehalfOfConsignee','endorsee', 'issueTo', 'seller', 'buyer', 'notifyParties','shippingInstructionsRequestor','other'] },\n },\n draft: {\n DEFAULT : { type: 'number', format: 'float' },\n },\n duplicateOfAcceptedEnvelopeTransferChainEntrySignedContent: {\n DEFAULT : { type: 'string', pattern: '^[A-Za-z0-9_-]+\\\\.[A-Za-z0-9_-]+\\\\.[A-Za-z0-9_-]+$' },\n },\n EblEnvelope: {\n DEFAULT : { type: 'object', title: 'Ebl Envelope', required: ['transportDocument', 'envelopeManifestSignedContent','envelopeTransferChain'], CHILDREN: ['transportDocument', 'envelopeManifestSignedContent','envelopeTransferChain'] },\n },\n eblPlatform: {\n 'EBL_SUR_v3.0.x' : { PARENTS: { Shipper: {}, Consginee: {}, Endorsee: {}, RecipientParty: { pseudoEnum: ['WAVE','CARX','ESSD','IDT','BOLE','EDOX','IQAX','SECR','TRGO','ETEU','TRAC','BRIT','COVA','ETIT','KTNE','CRED','BLOC','DOCU','AEOT','SGTD', 'NONE'] }, ActorParty: { pseudoEnum: ['WAVE','CARX','ESSD','IDT','BOLE','EDOX','IQAX','SECR','TRGO','ETEU','TRAC','BRIT','COVA','ETIT','KTNE','CRED','BLOC','DOCU','AEOT','SGTD'] } } },\n DEFAULT : { type: 'string', maxLength: 4, pattern: '^\\\\S+$', pseudoEnum: EBL_PLATFORM_SOLUTION_PROVIDERS },\n },\n eBLVisualisationByCarrier: {\n PARENTS : { IssuanceRequest: {}, EnvelopeManifest: {} },\n DEFAULT : { $ref: '#/components/schemas/SupportingDocument' },\n },\n eBLVisualisationByCarrierChecksum: {\n DEFAULT : { type: 'string', pattern: '^[0-9a-f]+$', maxLength: 64, minLength: 64 },\n },\n email: {\n DEFAULT : { type: 'string', maxLength: 100, pattern: '^.+@\\\\S+$' },\n },\n EmergencyContactDetails: {\n DEFAULT : { type: 'object', title: 'Emergency Contact Details', required: ['contact', 'phone'], CHILDREN: ['contact','provider','phone','referenceNumber'] },\n },\n emergencyContactDetails: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { $ref: '#/components/schemas/EmergencyContactDetails' },\n },\n emptyContainerPickup: {\n DEFAULT : { $ref: '#/components/schemas/EmptyContainerPickup' },\n },\n EmptyContainerPickup: {\n 'BKG_v2.0.0' : { DEFAULT: { type: 'object', title: 'Empty Container Pickup', deprecated: null, CHILDREN: ['dateTime','depotReleaseLocation'] } },\n 'BKG_v2.0.1' : { DEFAULT: { type: 'object', title: 'Empty Container Pickup', deprecated: null, CHILDREN: ['dateTime','depotReleaseLocation'] } },\n DEFAULT : { type: 'object', title: 'Empty Container Pickup', deprecated: true, CHILDREN: ['dateTime','depotReleaseLocation'] },\n },\n originEmptyContainerPickup: {\n DEFAULT : { $ref: '#/components/schemas/OriginEmptyContainerPickup' },\n },\n OriginEmptyContainerPickup: {\n DEFAULT : { type: 'object', title: 'Origin Empty Container Pickup', CHILDREN: ['dateTime','depotReleaseLocation'] },\n },\n emptyContainerPickupDateTime: {\n DEFAULT : { type: 'string', format: 'date-time' },\n },\n emptyContainerDepotReleaseLocation: {\n DEFAULT : { $ref: '#/components/schemas/EmptyContainerDepotReleaseLocation' },\n },\n EmptyContainerDepotReleaseLocation: {\n DEFAULT : { type: 'object', title: 'Empty Container Depot Release Location', CHILDREN: ['locationName', 'facilityName', 'address','addressLines', 'facility','UNLocationCode','geoCoordinate' ] },\n },\n emptyContainerUnits: {\n DEFAULT : { $ref: '#/components/schemas/EmptyContainerUnits' }\n },\n EmptyContainerUnits: {\n DEFAULT : { type: 'object', title: 'Empty Container Units', oneOf:true },\n },\n emptyIndicatorCode: {\n DEFAULT : { type: 'string', enum: ['LADEN','EMPTY'] },\n },\n EMSNumber: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { type: 'string', maxLength: 7 },\n },\n endOfHoldingTime: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { type: 'string', format: 'date' },\n },\n endorsee: {\n PARENTS : { DocumentParties: {}, DocumentPartiesShippingInstructions: { $ref: '#/components/schemas/EndorseeShipper' } },\n DEFAULT : { $ref: '#/components/schemas/Endorsee' },\n },\n Endorsee: {\n DEFAULT : { type: 'object', title: 'Endorsee', required: ['partyName','identifyingCodes'], CHILDREN: ['partyName','eblPlatform','address','addressLines','displayedAddress','identifyingCodes','taxLegalReferences','partyContactDetails', 'isNotifyParty'] },\n },\n EndorseeShipper: {\n DEFAULT : { type: 'object', title: 'Endorsee (Shipper provided)', required: ['partyName'], CHILDREN: ['partyName','eblPlatform','address','addressLines','displayedAddress','identifyingCodes','taxLegalReferences','partyContactDetails', 'isNotifyParty'] },\n },\n endorsementChain: {\n DEFAULT : { type: 'array', items: { $ref: '#/components/schemas/EndorsementChainLink' } },\n },\n EndorsementChain: {\n DEFAULT : { type: 'object', title: 'Endorsement Chain', required: ['transportDocumentReference'], CHILDREN: ['transportDocumentReference', 'transportDocumentSubReference', 'carrierSCACCode', 'endorsementChain']},\n },\n EndorsementChainLink: {\n 'EBL_SUR_v3.0.x' : { DEFAULT: { required: ['actionDateTime', 'actionCode', 'actor', 'recipient'] } },\n DEFAULT : { type: 'object', title: 'Endorsement Chain Link', required: ['actionDateTime', 'actionCode', 'actor'], CHILDREN: ['actionDateTime', 'actionCode', 'actor', 'recipient','auditReference'] },\n },\n EnvelopeManifest: {\n DEFAULT : { type: 'object', title: 'Envelope Manifest', required: ['transportDocumentChecksum','lastEnvelopeTransferChainEntrySignedContentChecksum'], CHILDREN: ['transportDocumentChecksum','lastEnvelopeTransferChainEntrySignedContentChecksum','eBLVisualisationByCarrier','supportingDocuments'] },\n },\n envelopeManifestSignedContent: {\n DEFAULT : { $ref: '#/components/schemas/EnvelopeManifestSignedContent' },\n },\n EnvelopeManifestSignedContent: {\n DEFAULT : { type: 'string', pattern: '^[A-Za-z0-9_-]+\\\\.[A-Za-z0-9_-]+\\\\.[A-Za-z0-9_-]+$' },\n },\n envelopeReference: {\n DEFAULT : { type: 'string', maxLength: 100 },\n },\n envelopeTransferChain: {\n DEFAULT : { type: 'array', minItems: 1, items: { $ref: '#/components/schemas/EnvelopeTransferChainEntrySignedContent' } },\n },\n EnvelopeTransferChainEntry: {\n DEFAULT : { type: 'object', title: 'Envelope Transfer Chain Entry', required: ['eblPlatform','transportDocumentChecksum','transactions'], CHILDREN: ['eblPlatform','transportDocumentChecksum','previousEnvelopeTransferChainEntrySignedContentChecksum','issuanceManifestSignedContent','controlTrackingRegistry','transactions'] },\n },\n EnvelopeTransferChainEntrySignedContent: {\n DEFAULT : { type: 'string', pattern: '^[A-Za-z0-9_-]+\\\\.[A-Za-z0-9_-]+\\\\.[A-Za-z0-9_-]+$' },\n },\n EnvelopeTransferFinishedResponse: {\n DEFAULT : { type: 'object', title: 'Envelope Transfer Finished Response', required: ['lastEnvelopeTransferChainEntrySignedContentChecksum','responseCode'], CHILDREN: ['lastEnvelopeTransferChainEntrySignedContentChecksum','responseCode', 'duplicateOfAcceptedEnvelopeTransferChainEntrySignedContent', 'reason', 'missingAdditionalDocumentChecksums', 'receivedAdditionalDocumentChecksums'] },\n },\n EnvelopeTransferFinishedResponseSignedContent: {\n DEFAULT : { type: 'string', pattern: '^[A-Za-z0-9_-]+\\\\.[A-Za-z0-9_-]+\\\\.[A-Za-z0-9_-]+$' },\n },\n EnvelopeTransferStartedResponse: {\n DEFAULT : { type: 'object', title: 'Envelope Transfer Started Response', required: ['envelopeReference','transportDocumentChecksum','lastEnvelopeTransferChainEntrySignedContentChecksum','missingAdditionalDocumentChecksums'], CHILDREN: ['envelopeReference','transportDocumentChecksum','lastEnvelopeTransferChainEntrySignedContentChecksum','missingAdditionalDocumentChecksums'] },\n },\n equipment: {\n PARENTS : { UtilizedTransportEquipmentCarrier: { $ref: '#/components/schemas/Equipment' }, UTEquipment: { $ref: '#/components/schemas/RequiredEquipment' }, UtilizedTransportEquipment: { $ref: '#/components/schemas/Equipment' } },\n },\n Equipment: {\n DEFAULT : { type: 'object', title: 'Equipment', required: ['equipmentReference'], CHILDREN: ['equipmentReference','ISOEquipmentCode','tareWeight'] },\n },\n equipmentReference: {\n PARENTS : { UtilizedTransportEquipmentHBL: {}, CargoItem: {}, CargoItemShipper: {}, CargoItemHBL: {}, UTEquipmentReference: {}, Equipment: {}, RequiredEquipment: {} },\n DEFAULT : { type: 'string', maxLength: 11, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n equipmentReferences: {\n PARENTS : { RequestedEquipment: {}, RequestedEquipmentShipper: {}, CargoItemCarrier: {} },\n DEFAULT : { type: 'array', items: { type: 'string', maxLength: 11, pattern: '^\\\\S(?:.*\\\\S)?$' } },\n },\n errorDateTime: {\n PARENTS : { ErrorResponse: {} },\n DEFAULT : { type: 'string', format: 'date-time' },\n },\n errorCode: {\n PARENTS : { DetailedError: {}, errors: {}, IssuanceError: {type: 'string', maxLength: 50, pattern: '^\\\\S+$', format: null, minimum: null, maximum: null } },\n DEFAULT : { type: 'integer', format: 'int32', minimum: 7000, maximum: 9999 },\n },\n erorCodeMessage: {\n 'OVS_v3.0.x' : { DEFAULT: { type: 'string', maxLength: 200 }, PARENTS: { DetailedError: {}, errors: {} } }, \n },\n errorCodeMessage: {\n PARENTS : { DetailedError: {}, errors: {} },\n DEFAULT : { type: 'string', maxLength: 5000 },\n },\n errorCodeText: {\n PARENTS : { DetailedError: {}, errors: {} },\n DEFAULT : { type: 'string', maxLength: 100 },\n },\n ErrorResponse: {\n DEFAULT : { type: 'object', title: 'Error Response', required: ['httpMethod', 'requestUri', 'statusCode', 'statusCodeText','errorDateTime', 'errors'], CHILDREN: ['httpMethod','requestUri','statusCode','statusCodeText','statusCodeMessage','providerCorrelationReference','errorDateTime','errors'] },\n },\n errors: {\n 'OVS_v3.0.x' : { DEFAULT: { minItems: null } },\n PARENTS : { ErrorResponse: {}, IssuanceResponse: {minItems: null, maxItems: 255, items: {$ref: '#/components/schemas/IssuanceError'}} },\n DEFAULT : { type: 'array', minItems: 1, items: {$ref: '#/components/schemas/DetailedError'} },\n },\n estimatedDateTime: {\n DEFAULT : { type: 'string', format: 'date-time'}\n },\n estimatedEmptyContainerPickupDateTime: {\n DEFAULT : { type: 'string', format: 'date-time' },\n },\n eventDateTime: {\n PARENTS : { Timestamp: {} },\n DEFAULT : { type: 'string', format: 'date-time' },\n },\n eventTypeCode: {\n PARENTS : { TerminalTimestamp: {}, Timestamp: {} },\n DEFAULT : { type: 'string', enum: ['ARRI', 'DEPA'] },\n },\n eventClassifierCode: {\n PARENTS : { Timestamp: {} },\n DEFAULT : { type: 'string', enum: ['PLN', 'EST', 'ACT'] },\n },\n expectedArrivalAtPlaceOfDeliveryStartDate: {\n PARENTS : { CreateBooking: {}, UpdateBooking: {}, Booking: {} },\n DEFAULT : { type: 'string', format: 'date' },\n },\n expectedArrivalAtPlaceOfDeliveryEndDate: {\n PARENTS : { CreateBooking: {}, UpdateBooking: {}, Booking: {} },\n DEFAULT : { type: 'string', format: 'date' },\n },\n expectedDepartureDate: {\n PARENTS : { CreateBooking: {}, UpdateBooking: {}, Booking: {} },\n DEFAULT : { type: 'string', format: 'date' },\n },\n expectedDepartureFromPlaceOfReceiptDate: {\n PARENTS : { CreateBooking: {}, UpdateBooking: {}, Booking: {} },\n DEFAULT : { type: 'string', format: 'date' },\n },\n expiryDate: {\n PARENTS : { ExportLicense: {}, ImportLicense: {},ExportLicenseShipper: {}, ImportLicenseShipper: {} },\n DEFAULT : { type: 'string', format: 'date' },\n },\n exportDeclarationReference: {\n PARENTS : { CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {} },\n DEFAULT : { type: 'string', maxLength: 35, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n ExportLicense: {\n DEFAULT : { type: 'object', title: 'Export License', CHILDREN: ['isRequired', 'reference', 'issueDate', 'expiryDate'] },\n },\n ExportLicenseShipper: {\n DEFAULT : { type: 'object', title: 'Export License (Shipper)', CHILDREN: ['isRequired', 'reference', 'issueDate', 'expiryDate'] },\n },\n exportLicense: {\n PARENTS : { Commodity: {}, CommodityShipper: {}, TransportDocument: {}, CargoItem: {}, CargoItemShipper: { $ref: '#/components/schemas/ExportLicenseShipper' }, ConsignmentItem: {}, ConsignmentItemShipper: { $ref: '#/components/schemas/ExportLicenseShipper' }, CreateShippingInstructions: { $ref: '#/components/schemas/ExportLicenseShipper' }, UpdateShippingInstructions: { $ref: '#/components/schemas/ExportLicenseShipper' }, ShippingInstructions: { $ref: '#/components/schemas/ExportLicenseShipper' } },\n DEFAULT : { $ref: '#/components/schemas/ExportLicense' },\n },\n exportLicenseExpiryDate: {\n PARENTS : { CommodityShipper: {}, Commodity: {} },\n DEFAULT : { type: 'string', format: 'date' },\n },\n exportLicenseIssueDate: {\n PARENTS : { CommodityShipper: {}, Commodity: {} },\n DEFAULT : { type: 'string', format: 'date' },\n },\n extendedChargeName: {\n PARENTS : { Charge: {} },\n DEFAULT : { type: 'string', maxLength: 100, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n extendedContractQuotationReference: {\n PARENTS : { CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {}, TransportDocument: {}, transportDocument: {} },\n DEFAULT : { type: 'string', maxLength: 70, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n extendedHSCodes: {\n PARENTS : { CommodityShipper: {}, Commodity: {}, ConsignmentItem: {}, ConsignmentItemShipper: {} },\n DEFAULT : { type: 'array', items: { type: 'string', minLength: 6, maxLength: 12, pattern: '^\\\\d{6,12}$' } },\n },\n ExtendedNationalCommodityCode: {\n DEFAULT : { type: 'object', title: 'National Commodity Code (Extended)', required: ['type', 'values'], CHILDREN: ['type', 'countryCode', 'values'] },\n },\n extendedNationalCommodityCodes: {\n PARENTS : { Commodity: {}, CommodityShipper: {}, ConsignmentItem: {}, ConsignmentItemShipper: {}, CargoItem: {}, CargoItemShipper: {}, ConsignmentItemHBL: {} },\n DEFAULT : { type: 'array', items: {$ref: '#/components/schemas/ExtendedNationalCommodityCode'} },\n },\n Facility: {\n 'JIT_v2.0.0' : { DEFAULT: { CHILDREN: ['facilityCode','facilityCodeListProvider','subFacility'] } },\n DEFAULT : { type: 'object', title: 'Facility', required: ['facilityCode', 'facilityCodeListProvider'], CHILDREN: ['facilityCode','facilityCodeListProvider'] },\n },\n facility: {\n DEFAULT : { $ref: '#/components/schemas/Facility' },\n },\n facilityCode: {\n 'EBL_v3.0.0' : { DEFAULT: { nullable: 'false'} },\n PARENTS : { Facility: {} },\n DEFAULT : { type: 'string', maxLength: 6, pattern: '^\\\\S(?:.*\\\\S)?$', pseudoEnum: [] },\n },\n facilityName: {\n 'OVS_HUB_TER_v1.0.x' : { PARENTS: { location: {} } },\n PARENTS : { TransportCallLocation: {}, PortScheduleLocation: {}, Location: {}, PlaceOfReceipt: {}, PlaceOfDelivery: {}, OnwardInlandRouting: {}, ContainerPositioningLocation: {}, EmptyContainerDepotReleaseLocation: {}, LoadLocation: {}, DischargeLocation: {} },\n DEFAULT : { type: 'string', maxLength: 100 },\n },\n facilitySMDGCode: {\n 'OVS_HUB_TER_v1.0.x' : { PARENTS: { TerminalTimestamp: {}, location: {} } },\n PARENTS : { FacilitySMDGLocation: {}, TransportCallLocation: {}, PortScheduleLocation: {} },\n DEFAULT : { type: 'string', maxLength: 6 },\n },\n FacilitySMDGLocation: {\n DEFAULT : { type: 'object', title: 'Facility SMDG Location', required: ['UNLocationCode','facilitySMDGCode','locationType'] },\n },\n facilityTypeCode: {\n 'OVS_v3.0.x' : { DEFAULT: {pseudoEnum: ['PBPL', 'BRTH'], default: 'BRTH'}},\n 'CS_v1.0.x' : { DEFAULT: { pseudoEnum: ['BORD','CLOC','COFS','OFFD','DEPO','INTE','POTE','PBPL','BRTH','RAMP','WAYP'] } },\n// 'CS_v1.0.1' : { DEFAULT: { pseudoEnum: ['BORD','CLOC','COFS','OFFD','DEPO','INTE','POTE','PBPL','BRTH','RAMP','WAYP'] } },\n 'JIT_v2.0.0' : { DEFAULT: { enum: ['PBPL', 'BRTH', 'ANCH'], pseudoEnum: [] }}, // No validation added for description\n DEFAULT : { type: 'string', maxLength: 4},\n },\n facilityCodeListProvider: {\n PARENTS : { Facility: {} },\n DEFAULT : { type: 'string', enum: ['BIC', 'SMDG'] },\n },\n Feedback: {\n DEFAULT : { type: 'object', title: 'Feedback', required: ['severity', 'code', 'message'], CHILDREN: ['severity', 'code', 'message', 'jsonPath', 'property'] },\n },\n FeedbackElement: {\n DEFAULT : { type: 'object', title: 'Feedback Element', CHILDREN: ['severity', 'message', 'propertyPath'] },\n },\n feedbackElements: {\n DEFAULT : { type: 'array', items: { $ref: '#/components/schemas/FeedbackElement' } },\n },\n feedbacks: {\n PARENTS : { ShippingInstructionsData: {}, ShippingInstructions: {}, TransportDocument: {}, shippingInstructions: {}, updatedShippingInstructions: {}, ShippingInstructionsRefStatus: {}, ShippingInstructionsRefCancelStatus: {}, Booking: {}, booking: {}, amendedBooking: {}, BookingRefStatus: {}, BookingNotificationData: {}, TransportDocumentData: {} },\n DEFAULT : { type: 'array', items: { $ref: '#/components/schemas/Feedback' } },\n },\n flag: {\n PARENTS : { Vessel: {}, Barge: {} },\n DEFAULT : { type: 'string', maxLength: 2, minLength: 2, pattern: '^[A-Z]{2}$' },\n },\n flashPoint: {\n PARENTS : { Limits: {} },\n DEFAULT : { type: 'number', format: 'float' },\n },\n floor: {\n 'OVS_v3.0.x' : { DEFAULT: { pattern: null } },\n PARENTS : { Address: {}, address: {}, AddressHBL: {}, PartyAddress: {} },\n DEFAULT : { type: 'string', pattern: '^\\\\S(?:.*\\\\S)?$', maxLength: 50 },\n },\n footprint: {\n DEFAULT : { type: 'object', CHILDREN: ['co2','co2e','sox','nox','pm10'] }\n },\n forwardDraft: {\n DEFAULT : { type: 'number', format: 'float' },\n },\n freeText: {\n PARENTS : { InvoicePayableAt: {} },\n DEFAULT : { type: 'string', maxLength: 35 }, // In TD invoicePayableAt\n },\n freightPaymentTermCode: {\n PARENTS : { CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {}, CreateShippingInstructions: {}, UpdateShippingInstructions: {}, ShippingInstructions: {}, updatedShippingInstructions: {}, shippingInstructions: {}, TransportDocument: {}, transportDocument: {} },\n DEFAULT : { type: 'string', enum: ['PRE', 'COL'] },\n },\n fullContainerPickupDateTime: {\n DEFAULT : { type: 'string', format: 'date-time' },\n },\n fumigationDateTime: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { type: 'string', format: 'date-time' },\n },\n GeoCoordinate: {\n DEFAULT : { type: 'object', title: 'Geo Coordinate', required: ['latitude', 'longitude'], CHILDREN: ['latitude', 'longitude'] },\n },\n geoCoordinate: {\n DEFAULT : { $ref: '#/components/schemas/GeoCoordinate' },\n },\n grossWeight: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { $ref: '#/components/schemas/GrossWeight' },\n },\n GrossWeight: {\n DEFAULT : { type: 'object', title: 'Gross Weight', required: ['value','unit'], CHILDREN: ['value','unit'] },\n },\n haulageChargesPaymentTermCode: {\n PARENTS : { OriginChargesPaymentTerm: {}, DestinationChargesPaymentTerm: {} },\n DEFAULT : { type: 'string', enum: ['PRE', 'COL'] },\n },\n HouseBillOfLading: {\n DEFAULT : { type: 'object', title: 'House Bill of Lading', required: ['houseBillOfLadingReference','isToOrder','methodOfPayment','documentParties','isCargoDeliveredInICS2Zone','routingOfConsignmentCountries','consignmentItems','utilizedTransportEquipments'], CHILDREN: ['houseBillOfLadingReference','isToOrder','placeOfAcceptance','placeOfFinalDelivery','methodOfPayment','documentParties','isCargoDeliveredInICS2Zone','routingOfConsignmentCountries','consignmentItems','utilizedTransportEquipments'] },\n },\n houseBillOfLadingReference: {\n DEFAULT : { type: 'string', maxLength: 20, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n houseBillOfLadings: {\n DEFAULT : { type: 'array', items: {$ref: '#/components/schemas/HouseBillOfLading'} },\n },\n HSCodes: {\n PARENTS : { CommodityShipper: {}, Commodity: {}, ConsignmentItem: { minItems: 1 }, ConsignmentItemShipper: {minItems: 1} },\n DEFAULT : { type: 'array', deprecated: true, items: { type: 'string', minLength: 6, maxLength: 10, pattern: '^\\\\d{6,10}$' } },\n },\n httpMethod: {\n 'OVS_v3.0.x' : { DEFAULT: { enum: ['GET', 'HEAD', 'POST', 'PUT', 'DELETE', 'OPTION', 'PATCH'] } },\n 'EBL_SUR_v3.0.x' : { DEFAULT: { enum: ['GET', 'HEAD', 'POST', 'PUT', 'DELETE', 'OPTION', 'PATCH'] } },\n 'EBL_ISS_v3.0.x' : { DEFAULT: { enum: ['GET', 'HEAD', 'POST', 'PUT', 'DELETE', 'OPTION', 'PATCH'] } },\n 'EBL_v3.0.x' : { DEFAULT: { enum: ['GET', 'HEAD', 'POST', 'PUT', 'DELETE', 'OPTION', 'PATCH'] } },\n 'BKG_v2.0.x' : { DEFAULT: { enum: ['GET', 'HEAD', 'POST', 'PUT', 'DELETE', 'OPTION', 'PATCH'] } },\n 'CS_v1.0.x' : { DEFAULT: { enum: ['GET', 'HEAD', 'POST', 'PUT', 'DELETE', 'OPTION', 'PATCH'] } },\n PARENTS : { ErrorResponse: {} },\n DEFAULT : { type: 'string', enum: ['GET', 'HEAD', 'POST', 'PUT', 'DELETE', 'OPTIONS', 'PATCH'], pseudoEnum: [] },\n },\n humiditySetpoint: {\n PARENTS : { ActiveReeferSettings: {} },\n DEFAULT : { type: 'number', format: 'float', minimum: '0', maximum: 100 },\n },\n id: {\n PARENTS : DCSA_CLOUDEVENT_GROUP,\n DEFAULT : { type: 'string', maxLength: 100},\n },\n IdentifyingCode: {\n DEFAULT : { type: 'object', title: 'Identifying Code', required: ['codeListProvider', 'partyCode'], CHILDREN: ['codeListProvider','partyCode','codeListName'] },\n },\n identifyingCodes: {\n 'BKG_v2.0.x' : { PARENTS: { BookingAgent: { minItems: null }, Shipper: { minItems: null }, Consignee: { minItems: null }, ServiceContractOwner: { minItems: null }, CarrierBookingOffice: { minItems: null }, IssueToParty: { minItems: null }, Party: { minItems: null } } },\n PARENTS : { BookingAgent: { minItems: null }, Shipper: { minItems: null }, ShipperShipper: { minItems: null }, OnBehalfOfShipper: { minItems: null }, OnBehalfOfShipperShipper: { minItems: null }, ShipperHBL: { minItems: null }, Consignee: {}, OnBehalfOfConsignee: {}, OnBehalfOfConsigneeShipper: {}, ConsigneeShipper: { minItems: null }, ConsigneeHBL: { minItems: null }, Endorsee: {}, EndorseeShipper: { minItems: null }, ServiceContractOwner: { minItems: null }, CarrierBookingOffice: { minItems: null }, Party: { minItems: null }, PartyShipper: { minItems: null }, PartyHBL: { minItems: null }, IssuingParty: { minItems: null }, IssueToParty: {}, ActorParty: {}, RecipientParty: {}, SurrenderRequestedBy: { minItems: null }, NotifyParty: { minItems: null }, NotifyPartyShipper: { minItems: null }, NotifyPartyHBL: { minItems: null }, Seller: { minItems: null }, SellerHBL: { minItems: null }, Buyer: { minItems: null }, BuyerHBL: { minItems: null }, ShippingInstructionsRequestor: { minItems: null }, RepresentedActorParty: { minItems: null }, RepresentedRecipientParty: { minItems: null } },\n DEFAULT : { type: 'array', minItems: 1, items: {$ref: '#/components/schemas/IdentifyingCode'} },\n },\n imoClass: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { type: 'string', maxLength: 4, pseudoEnum: ['1.1A','1.6N','2.1','8'] },\n },\n imoPackagingCode: {\n PARENTS : { OuterPackaging: {}, OuterPackagingCarrier: {} },\n DEFAULT : { type: 'string', minLength: 1, maxLength: 5, pattern: '^[A-Z0-9]{1,5}$' },\n },\n ImportLicense : {\n DEFAULT : { type: 'object', title: 'Import License', CHILDREN: ['isRequired', 'reference', 'issueDate', 'expiryDate'] },\n },\n ImportLicenseShipper : {\n DEFAULT : { type: 'object', title: 'Import License (Shipper)', CHILDREN: ['isRequired', 'reference', 'issueDate', 'expiryDate'] },\n },\n importLicense : {\n PARENTS : { Commodity: {}, CommodityShipper: {}, TransportDocument: {}, CargoItem: {}, CargoItemShipper: { $ref: '#/components/schemas/ImportLicenseShipper' }, ConsignmentItem: {}, ConsignmentItemShipper: { $ref: '#/components/schemas/ImportLicenseShipper' }, CreateShippingInstructions: { $ref: '#/components/schemas/ImportLicenseShipper' }, UpdateShippingInstructions: { $ref: '#/components/schemas/ImportLicenseShipper' }, ShippingInstructions: { $ref: '#/components/schemas/ImportLicenseShipper' } },\n DEFAULT : { $ref: '#/components/schemas/ImportLicense' },\n },\n incoTerms: {\n PARENTS : { CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {} },\n DEFAULT : { type: 'string', maxLength: 3 },\n },\n inhalationZone: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { type: 'string', minLength: 1, maxLength: 1, pseudoEnum: ['A','B','C','D'] },\n },\n InnerPackaging: {\n DEFAULT : { type: 'object', title: 'Inner Packaging', required: ['quantity', 'material', 'description'], CHILDREN: ['quantity','material','description', 'innerPackagings'] },\n },\n innerPackagings: {\n PARENTS : { DangerousGoods: {}, InnerPackaging: {} },\n DEFAULT : { type: 'array', items: { $ref: '#/components/schemas/InnerPackaging' } },\n },\n IntermediateCall: {\n DEFAULT : { type: 'object', title: 'Intermediate Call', required: ['location'], CHILDREN: ['transportCallReference','facilityTypeCode','location','arrivalDateTime','departureDateTime'] },\n },\n intermediateCalls: {\n PARENTS : { Leg: {} },\n DEFAULT : { type: 'array', items: { $ref: '#/components/schemas/IntermediateCall' } },\n },\n InvoicePayableAt: {\n 'BKG_v2.0.x' : { DEFAULT: { type: 'object', title: 'Invoice Payable At', required: ['UNLocationCode'], CHILDREN: ['UNLocationCode'] } },\n// 'BKG_v2.0.1' : { DEFAULT: { type: 'object', title: 'Invoice Payable At', required: ['UNLocationCode'], CHILDREN: ['UNLocationCode'] } },\n// 'BKG_v2.0.2' : { DEFAULT: { type: 'object', title: 'Invoice Payable At', required: ['UNLocationCode'], CHILDREN: ['UNLocationCode'] } },\n DEFAULT : { type: 'object', title: 'Invoice Payable At', CHILDREN: ['UNLocationCode','freeText'] },\n },\n InvoicePayableAtShippingInstructions: {\n DEFAULT : { type: 'object', title: 'Invoice Payable At (Shipping Instructions)', required: ['UNLocationCode'], CHILDREN: ['UNLocationCode'] },\n },\n invoicePayableAt: {\n PARENTS : { CreateBooking: { $ref: '#/components/schemas/InvoicePayableAt' }, UpdateBooking: { $ref: '#/components/schemas/InvoicePayableAt' }, Booking: { $ref: '#/components/schemas/InvoicePayableAt' }, CreateShippingInstructions: { $ref: '#/components/schemas/InvoicePayableAtShippingInstructions' }, UpdateShippingInstructions: { $ref: '#/components/schemas/InvoicePayableAtShippingInstructions' }, ShippingInstructions: { $ref: '#/components/schemas/InvoicePayableAtShippingInstructions' }, TransportDocument: { }},\n DEFAULT : { $ref: '#/components/schemas/InvoicePayableAt' },\n },\n \n isBulbMode: {\n PARENTS : { ActiveReeferSettings: {} },\n DEFAULT : { type: 'boolean' },\n },\n isCarriersAgentAtDestinationRequired: {\n PARENTS : { CreateShippingInstructions: {}, UpdateShippingInstructions: {}, ShippingInstructions: {}, updatedShippingInstructions: {}, shippingInstructions: {} },\n DEFAULT : { type: 'boolean' },\n },\n isColdTreatmentRequired: {\n PARENTS : { ActiveReeferSettings: {} },\n DEFAULT : { type: 'boolean' },\n },\n isCompetentAuthorityApprovalRequired: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { type: 'boolean' },\n },\n isControlledAtmosphereRequired: {\n PARENTS : { ActiveReeferSettings: {} },\n DEFAULT : { type: 'boolean' },\n },\n isCargoDeliveredInICS2Zone: {\n PARENTS : { CreateShippingInstructions: {}, UpdateShippingInstructions: {}, ShippingInstructions: {}, HouseBillOfLading: {} },\n DEFAULT : { type: 'boolean' },\n },\n isDrainholesOpen: {\n PARENTS : { ActiveReeferSettings: {} },\n DEFAULT : { type: 'boolean' },\n },\n isDummyVessel: {\n PARENTS : { Schedule: {}, VesselVoyage: {}, VesselSchedule: {} },\n DEFAULT : { type: 'boolean' },\n },\n isElectronic: {\n PARENTS : { CreateShippingInstructions: {}, UpdateShippingInstructions: {}, ShippingInstructions: {}, TransportDocument: {} },\n DEFAULT : { type: 'boolean' },\n },\n isEmptyUncleanedResidue: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { type: 'boolean' },\n },\n isEquipmentSubstitutionAllowed: {\n PARENTS : { CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {} },\n DEFAULT : { type: 'boolean' },\n },\n isExceptedQuantity: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { type: 'boolean' },\n },\n isExportDeclarationRequired: {\n PARENTS : { CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {} },\n DEFAULT : { type: 'boolean' },\n },\n isFYI: {\n PARENTS : { Cancel: { writeOnly: null }, Decline: { writeOnly: null }, Omit: { writeOnly: null }, PortCall: {}, TerminalCall: {}, PortCallService: {}, Timestamp: {}, VesselStatus: {}, OmitPortCall: { writeOnly: null }, OmitTerminalCall: { writeOnly: null } },\n DEFAULT : { type: 'boolean', writeOnly: 'true', default: 'false' },\n },\n isGeneratorSetRequired: {\n PARENTS : { ActiveReeferSettings: {} },\n DEFAULT : { type: 'boolean' },\n },\n isHouseBillOfLadingsIssued: {\n PARENTS : { CreateShippingInstructions: {}, UpdateShippingInstructions: {}, ShippingInstructions: {} },\n DEFAULT : { type: 'boolean' },\n },\n isHot: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { type: 'boolean' },\n },\n isLimitedQuantity: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { type: 'boolean' },\n },\n isMarinePollutant: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { type: 'boolean' },\n },\n isNonOperatingReefer: {\n PARENTS : { RequestedEquipment: {}, RequestedEquipmentShipper: {}, UtilizedTransportEquipmentCarrier: {}, UtilizedTransportEquipment: {} },\n DEFAULT : { type: 'boolean' },\n },\n isNotifyParty: {\n PARENTS : { Consignee: {}, ConsigneeShipper: {}, Endorsee: {}, EndorseeShipper: {} },\n DEFAULT : { type: 'boolean' },\n },\n ISOEquipmentCode: {\n PARENTS : { UtilizedTransportEquipmentHBL: {}, ConfirmedEquipment: {}, RequestedEquipment: {}, RequestedEquipmentShipper: {}, Equipment: {}, RequiredEquipment: {} },\n DEFAULT : { type: 'string', maxLength: 4, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n isPartialLoadAllowed: {\n PARENTS : { CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {} },\n DEFAULT : { type: 'boolean' },\n },\n isPreCoolingRequired: {\n PARENTS : { ActiveReeferSettings: {} },\n DEFAULT : { type: 'boolean' },\n },\n isReportableQuantity: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { type: 'boolean' },\n },\n isRequired: {\n DEFAULT : { type: 'boolean' },\n },\n isSalvagePackings: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { type: 'boolean' },\n },\n isShippedOnBoardType: {\n PARENTS : { CreateShippingInstructions: {}, UpdateShippingInstructions: {}, ShippingInstructions: {}, updatedShippingInstructions: {}, shippingInstructions: {}, TransportDocument: {}, transportDocument: {} },\n DEFAULT : { type: 'boolean' },\n },\n isShipperOwned: {\n PARENTS : { RequestedEquipment: {}, RequestedEquipmentShipper: {}, UtilizedTransportEquipmentHBL: {}, UTEquipment: {}, UTEquipmentReference: {}, UtilizedTransportEquipment: {} },\n DEFAULT : { type: 'boolean' },\n },\n IssuanceError: {\n DEFAULT : { type: 'object', title: 'Issuance Error', CHILDREN: ['reason', 'errorCode'] },\n },\n IssuanceManifest: {\n DEFAULT : { type: 'object', title: 'Issuance Manifest', required: ['documentChecksum', 'issueToChecksum'], CHILDREN: ['documentChecksum', 'eBLVisualisationByCarrierChecksum', 'issueToChecksum'] },\n },\n issuanceManifestSignedContent: {\n DEFAULT : { type: 'string', pattern: '^[A-Za-z0-9_-]+\\\\.[A-Za-z0-9_-]+\\\\.[A-Za-z0-9_-]+$' },\n },\n IssuanceRequest: {\n DEFAULT : { type: 'object', title: 'Issuance Request', required: ['document', 'issueTo', 'issuanceManifestSignedContent'] },\n },\n IssuanceResponse: {\n DEFAULT : { type: 'object', title: 'Issuance Response', required: ['transportDocumentReference', 'issuanceResponseCode'], CHILDREN: ['transportDocumentReference','transportDocumentSubReference', 'issuanceResponseCode', 'reason', 'errors'] },\n },\n issuanceResponseCode: {\n DEFAULT : { type: 'string', enum: ['ISSU','BREQ', 'REFU'] },\n },\n issueDate: {\n PARENTS : { TransportDocument: {}, transportDocument: {}, ExportLicense: {}, ImportLicense: {}, ExportLicenseShipper: {}, ImportLicenseShipper: {} },\n DEFAULT : { type: 'string', format: 'date' },\n },\n issueTo: {\n PARENTS : { IssuanceRequest: {}, DocumentParties: {}, DocumentPartiesShippingInstructions: {}, DocumentPartiesReq: {} },\n DEFAULT : { $ref: '#/components/schemas/IssueToParty' },\n },\n issueToChecksum: {\n DEFAULT : { type: 'string', pattern: '^[0-9a-f]+$', maxLength: 64, minLength: 64 },\n },\n\n IssueToParty: {\n 'BKG_v2.0.x' : { DEFAULT: { required: ['partyName'] } },\n 'EBL_ISS_v3.0.x' : { DEFAULT: { required: ['partyName', 'sendToPlatform', 'identifyingCodes'] } },\n// 'EBL_ISS_v3.0.1' : { DEFAULT: { required: ['partyName', 'sendToPlatform', 'identifyingCodes'] } },\n DEFAULT : { type: 'object', title: 'Issue To Party', required: ['partyName', 'identifyingCodes'], CHILDREN: ['partyName', 'sendToPlatform', 'identifyingCodes', 'taxLegalReferences'] },\n },\n issuingParty: {\n PARENTS : { DocumentParties: {} },\n DEFAULT : { $ref: '#/components/schemas/IssuingParty' },\n },\n IssuingParty: {\n DEFAULT : { type: 'object', title: 'Issuing Party', required: ['partyName', 'address'], CHILDREN: ['partyName','address','addressLines','identifyingCodes','taxLegalReferences','partyContactDetails'] },\n },\n isToOrder: {\n PARENTS : { CreateShippingInstructions: {}, UpdateShippingInstructions: {}, ShippingInstructions: {}, updatedShippingInstructions: {}, shippingInstructions: {}, TransportDocument: {}, transportDocument: {}, HouseBillOfLading: {} },\n DEFAULT : { type: 'boolean' },\n },\n isVentilationOpen: {\n PARENTS : { ActiveReeferSettings: {} },\n DEFAULT : { type: 'boolean' },\n },\n isWaste: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { type: 'boolean' },\n },\n jsonPath: {\n PARENTS : { Feedback: {}, DetailedError: {} },\n DEFAULT : { type: 'string', maxLength: 500 },\n },\n ladenContainerUnits: {\n DEFAULT : { $ref: '#/components/schemas/LadenContainerUnits' }\n },\n LadenContainerUnits: {\n DEFAULT : { type: 'object', title: 'Laden Container Units', oneOf:true },\n },\n lastEnvelopeTransferChainEntrySignedContentChecksum: {\n DEFAULT : { type: 'string', minLength: 64, maxLength: 64, pattern: '^[0-9a-f]+$' },\n },\n latitude: {\n PARENTS : { GeoCoordinate: {} },\n DEFAULT : { type: 'string', maxLength: 10 },\n },\n Leg: {\n DEFAULT : { type: 'object', title: 'Leg', required: ['departure', 'arrival'], CHILDREN: ['sequenceNumber', 'transport', 'departure', 'intermediateCalls', 'arrival','footprint','cutOffTimes'] },\n },\n legs: {\n PARENTS : { PointToPoint: {} },\n DEFAULT : { type: 'array', minItems: 1, items: {$ref: '#/components/schemas/Leg'} },\n },\n lengthOverall: {\n DEFAULT : { type: 'number', format: 'float' },\n },\n Limits: {\n DEFAULT : { type: 'object', title: 'Limits', required: ['temperatureUnit'], CHILDREN: ['temperatureUnit','flashPoint','transportControlTemperature','transportEmergencyTemperature','SADT','SAPT'] },\n },\n limits: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { $ref: '#/components/schemas/Limits' },\n },\n loadLocation: {\n PARENTS : { Transport: {$ref:'#/components/schemas/LoadLocation' } },\n },\n LoadLocation: {\n DEFAULT : { type: 'object', title: 'Load Location', CHILDREN: ['locationName', 'facilityName', 'address','addressLines', 'facility', 'UNLocationCode' ] },\n },\n loadUnits: {\n DEFAULT : { $ref: '#/components/schemas/LoadUnits' }\n },\n LoadUnits: {\n DEFAULT : { type: 'object', title: 'Load Units', CHILDREN: ['ladenContainerUnits','emptyContainerUnits','reeferPluggedContainerUnits','oogUnits'] },\n },\n location: {\n 'OVS_HUB_TER_v1.0.x' : { DEFAULT: { type: 'object', title: 'Location' }, PARENTS: { TransportCall: {} } },\n 'OVS_v3.0.x' : { PARENTS: { TransportCall: {} } },\n 'CS_v1.0.x' : { PARENTS: { IntermediateCall: { $ref: '#/components/schemas/Location' }, PlaceOfReceipt: { $ref: '#/components/schemas/Location' }, TransportCall: { $ref: '#/components/schemas/TransportCallLocation' }, PortSchedule: { $ref: '#/components/schemas/PortScheduleLocation' }, PlaceOfDelivery: { $ref: '#/components/schemas/Location' }, PlaceOfArrival: { $ref: '#/components/schemas/Location' }, PlaceOfDeparture: { $ref: '#/components/schemas/Location' } } },\n PARENTS : { ShipmentLocation: {}, ContainerPositioning: {$ref: '#/components/schemas/ContainerPositioningLocation'}, ContainerPositioningEstimated: {$ref: '#/components/schemas/ContainerPositioningLocation'} },\n DEFAULT : { $ref: '#/components/schemas/Location' },\n },\n Location: {\n 'CS_v1.0.x' : { DEFAULT: { type: 'object', title: 'Location', CHILDREN: ['locationName','facilityName','address','addressLines','UNLocationCode','facility'] } },\n DEFAULT : { type: 'object', title: 'Location', CHILDREN: ['locationName','facilityName','address','addressLines','facility','UNLocationCode','geoCoordinate'] },\n },\n locationName: {\n 'OVS_HUB_TER_v1.0.x' : { PARENTS: { location: {} } },\n 'OVS_v3.0.x' : { PARENTS: { AddressLocation: { pattern: null }, FacilitySMDGLocation: { pattern: null }, UNLocationLocation: { pattern: '^\\\\S+(\\\\s+\\\\S+)*$' } } },\n PARENTS : { PortScheduleLocation: {}, TransportCallLocation:{}, VesselPosition: {}, PortCallServiceLocation: {}, PortCallServiceLocationTimestamp: {}, PlaceOfAcceptance: { maxLength: 35}, PlaceOfFinalDelivery: { maxLength: 35}, PlaceOfReceipt: {}, PortOfLoading: {}, PlaceOfDelivery: {}, PortOfDischarge: {}, OnwardInlandRouting:{}, PlaceOfIssue: {}, PlaceOfBLIssue: {}, Location: {}, ContainerPositioningLocation: {}, EmptyContainerDepotReleaseLocation: {}, LoadLocation: {}, DischargeLocation: {} },\n DEFAULT : { type: 'string', maxLength: 100, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n locationType: {\n 'OVS_v3.0.x' : { DEFAULT: { type: 'string', maxLength: 4 }, PARENTS: { AddressLocation: {}, FacilitySMDGLocation: {}, UNLocationLocation: {} } },\n// PARENTS : { AddressLocation: {}, FacilitySMDGLocation: {}, UNLocationLocation: {} },\n// PARENTS : { AddressLocation: {}, CityLocation: {}, Facility: {}, UNLocationLocation: {}, FacilitySMDGLocation: {} },\n// DEFAULT : { type: 'string', maxLength: 4 },\n },\n locationTypeCode: {\n PARENTS : { ShipmentLocation: {} },\n DEFAULT : { type: 'string', maxLength: 3, pseudoEnum: ['PRE','POL','POD','PDE','PCF','OIR','ORI','IEL','PTP','RTP','FCD','ROU'] },\n },\n longitude: {\n PARENTS : { GeoCoordinate: {} },\n DEFAULT : { type: 'string', maxLength: 11 },\n },\n manifestTypeCode: {\n PARENTS : { AdvanceManifestFiling: {} },\n DEFAULT : { type: 'string', maxLength: 50, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n material: {\n PARENTS : { InnerPackaging: {} },\n DEFAULT : { type: 'string', maxLength: 100 },\n },\n mediaType: {\n DEFAULT : { type: 'string', maxLength:100 },\n },\n message: {\n PARENTS : { Feedback: {}, FeedbackElement: {} },\n DEFAULT : { type: 'string', maxLength: 5000 },\n },\n methodOfPayment: {\n DEFAULT : { type: 'string', maxLength: 1, pseudoEnum: ['A','B','C','D','H','Y','Z'] },\n },\n milesToDestinationPort: {\n DEFAULT : { type: 'number', format: 'float' }\n },\n missingAdditionalDocumentChecksums: {\n PARENTS : { EnvelopeTransferFinishedResponse: { minItems: null}, EnvelopeTransferStartedResponse: {} },\n DEFAULT : { type: 'array', minItems: 1, items: { $ref: '#/components/schemas/DocumentChecksum' } },\n },\n MMSINumber: {\n DEFAULT : { type: 'string', minLength: 9, maxLength: 9, pattern: '^\\\\d{9}$' },\n },\n modeOfTransport: {\n 'BKG_v2.0.0' : { DEFAULT: { type: 'string', maxLength: 50, pseudoEnum: ['VESSEL','RAIL','TRUCK','BARGE','MULTIMODAL'] } },\n 'BKG_v2.0.1' : { DEFAULT: { type: 'string', maxLength: 50, pseudoEnum: ['VESSEL','RAIL','TRUCK','BARGE','MULTIMODAL'] } },\n PARENTS : { Transport: { pseudoEnum: ['VESSEL','RAIL','TRUCK','BARGE','RAIL_TRUCK', 'BARGE_RAIL', 'BARGE_TRUCK','MULTIMODAL'] }, VesselTransport: { maxLength: null, enum: ['VESSEL'], pseudoEnum: [] }, BargeTransport: { maxLength: null, enum: ['BARGE'], pseudoEnum: []}, OtherTransport: { maxLength: null, enum: ['RAIL_TRUCK', 'BARGE_TRUCK', 'BARGE_RAIL', 'MULTIMODAL', 'RAIL', 'TRUCK'] } },\n DEFAULT : { type: 'string', maxLength: 50 },\n },\n moves: {\n DEFAULT : { $ref: '#/components/schemas/MovesList' }\n },\n Moves: {\n DEFAULT : { type: 'object', title: 'Moves', CHILDREN: ['carrierCode','carrierCodeListProvider','restows'], oneOf: true },\n },\n MovesList: {\n DEFAULT : { type: 'array', items: {$ref: '#/components/schemas/Moves'} },\n },\n name: {\n 'OVS_v3.0.x' : { DEFAULT: { maxLength: 100, pattern: null }, PARENTS: { address: {} } },\n PARENTS : { DocumentMetadata: {}, Vessel: { maxLength: 50 }, Barge: { maxLength: 50 }, SupportingDocument: {maxLength: 100, pattern: null }, vessel: { maxLength: 50 }, PartyContactDetail: { maxLength: 35 }, PartyContactDetailHBL: { maxLength: 35 }, PartyContactDetailWithPattern: { maxLength: 35 } },\n DEFAULT : { type: 'string', pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n NANumber: {\n DEFAULT : { type: 'string', minLength: 4, maxLength: 4, pattern: '^\\\\d{4}$' },\n },\n NationalCommodityCode: {\n DEFAULT : { type: 'object', title: 'National Commodity Code', deprecated: true, required: ['type', 'values'], CHILDREN: ['type', 'countryCode', 'values'] },\n },\n nationalCommodityCode: {\n PARENTS : { ConsignmentItemHBL: {} },\n DEFAULT : { $ref: '#/components/schemas/NationalCommodityCode' },\n },\n nationalCommodityCodes: {\n PARENTS : { Commodity: {}, CommodityShipper: {}, ConsignmentItem: {}, ConsignmentItemShipper: {}, CargoItem: {}, CargoItemShipper: {} },\n DEFAULT : { type: 'array', deprecated: true, items: {$ref: '#/components/schemas/NationalCommodityCode'} },\n },\n netExplosiveContent: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { $ref: '#/components/schemas/NetExplosiveContent' },\n },\n NetExplosiveContent: {\n DEFAULT : { type: 'object', title: 'Net Explosive Content', required: ['value', 'unit'], CHILDREN: ['value','unit'] },\n },\n netWeight: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { $ref: '#/components/schemas/NetWeight' },\n },\n NetWeight: {\n DEFAULT : { type: 'object', title: 'Net Weight', required: ['value', 'unit'], CHILDREN: ['value','unit'] },\n },\n netVolume: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { $ref: '#/components/schemas/NetVolume' },\n },\n NetVolume: {\n DEFAULT : { type: 'object', title: 'Net Volume', required: ['value', 'unit'], CHILDREN: ['value','unit'] },\n },\n nox: {\n PARENTS : { footprint: {}, solutionFootprint: {} },\n DEFAULT : { type: 'number', format: 'double' },\n },\n notifyParties: {\n PARENTS : { DocumentParties: {}, DocumentPartiesShippingInstructions: { items: { $ref: '#/components/schemas/NotifyPartyShipper' } } },\n DEFAULT : { type: 'array', maxItems: 3, items: { $ref: '#/components/schemas/NotifyParty' } },\n },\n notifyParty: {\n PARENTS : { DocumentPartiesHouseBL: {} },\n DEFAULT : { $ref: '#/components/schemas/NotifyPartyHBL' },\n },\n NotifyParty: {\n DEFAULT : { type: 'object', title: 'Notify Party', required: ['partyName'], CHILDREN: ['partyName','typeOfPerson','address','addressLines','displayedAddress','identifyingCodes','taxLegalReferences','partyContactDetails', 'reference'] },\n },\n NotifyPartyShipper: {\n DEFAULT : { basedOn: 'NotifyParty', title: 'Notify Party (Shipper provided)' },\n },\n NotifyPartyHBL: {\n DEFAULT : { type: 'object', title: 'Notify Party (House B/L)', required: ['partyName','partyContactDetails', 'typeOfPerson'], CHILDREN: ['partyName','typeOfPerson','address','identifyingCodes','taxLegalReferences','partyContactDetails'] },\n },\n number: {\n PARENTS : { Seal: {} },\n DEFAULT : { type: 'string', maxLength: 15 },\n },\n numberOfCopiesWithCharges: {\n PARENTS : { CreateShippingInstructions: {}, UpdateShippingInstructions: {}, ShippingInstructions: {}, updatedShippingInstructions: {}, shippingInstructions: {}, TransportDocument: {}, transportDocument: {} },\n DEFAULT : { type: 'integer', format: 'int32', minimum: '0' },\n },\n numberOfCopiesWithoutCharges: {\n PARENTS : { CreateShippingInstructions: {}, UpdateShippingInstructions: {}, ShippingInstructions: {}, updatedShippingInstructions: {}, shippingInstructions: {}, TransportDocument: {}, transportDocument: {} },\n DEFAULT : { type: 'integer', format: 'int32', minimum: '0' },\n },\n numberOfOriginalsWithCharges: {\n PARENTS : { CreateShippingInstructions: {}, UpdateShippingInstructions: {}, ShippingInstructions: {}, updatedShippingInstructions: {}, shippingInstructions: {}, TransportDocument: {}, transportDocument: {} },\n DEFAULT : { type: 'integer', format: 'int32', minimum: '0' },\n },\n numberOfOriginalsWithoutCharges: {\n PARENTS : { CreateShippingInstructions: {}, UpdateShippingInstructions: {}, ShippingInstructions: {}, updatedShippingInstructions: {}, shippingInstructions: {}, TransportDocument: {}, transportDocument: {} },\n DEFAULT : { type: 'integer', format: 'int32', minimum: '0' },\n },\n numberOfPackages: {\n PARENTS : { OuterPackaging: {}, OuterPackagingShipper: {}, OuterPackagingHBL: {} },\n DEFAULT : { type: 'integer', format: 'int32', minimum: 1, maximum: 99999999 },\n },\n numberOfRiderPages: {\n PARENTS : { TransportDocument: {}, transportDocument: {} },\n DEFAULT : { type: 'integer', format: 'int32', minimum: '0' },\n },\n o2Setpoint: {\n PARENTS : { ActiveReeferSettings: {} },\n DEFAULT : { type: 'number', format: 'float', minimum: '0', maximum: 100 },\n },\n omit: {\n DEFAULT : { type: 'boolean' },\n },\n OmitPortCall: {\n DEFAULT : { type: 'object', title: 'Omit Port Call', CHILDREN: ['reason','isFYI'] },\n },\n OmitTerminalCall: {\n DEFAULT : { type: 'object', title: 'Omit Terminal Call', CHILDREN: ['reason','isFYI'] },\n },\n omitted: {\n PARENTS : { PortCall: {}, TerminalCall: {} },\n DEFAULT : { type: 'boolean', readOnly: 'true', default: 'false' },\n },\n onBehalfOfConsignee : {\n PARENTS : { DocumentParties: {}, DocumentPartiesShippingInstructions: { $ref: '#/components/schemas/OnBehalfOfConsigneeShipper' } },\n DEFAULT : { $ref: '#/components/schemas/OnBehalfOfConsignee' },\n },\n OnBehalfOfConsignee: {\n DEFAULT : { type: 'object', title: 'On Behalf of Consignee', required: ['partyName'], CHILDREN: ['partyName','address','addressLines','identifyingCodes'] },\n },\n OnBehalfOfConsigneeShipper :{\n DEFAULT : { basedOn: 'OnBehalfOfConsignee', title: 'On Behalf of Consignee (Shipper provided)' },\n },\n onBehalfOfShipper : {\n PARENTS : { DocumentParties: {}, DocumentPartiesShippingInstructions: { $ref: '#/components/schemas/OnBehalfOfShipperShipper' } },\n DEFAULT : { $ref: '#/components/schemas/OnBehalfOfShipper' },\n },\n OnBehalfOfShipper: {\n DEFAULT : { type: 'object', title: 'On Behalf of Shipper', required: ['partyName'], CHILDREN: ['partyName','address','addressLines','identifyingCodes'] },\n },\n OnBehalfOfShipperShipper :{\n DEFAULT : { basedOn: 'OnBehalfOfShipper', title: 'On Behalf of Shipper (Shipper provided)' },\n },\n onCarriageBy: {\n PARENTS : { Transports: {} },\n DEFAULT : { type: 'string', maxLength: 50, pseudoEnum: ['VESSEL','RAIL','TRUCK','BARGE','MULTIMODAL'] },\n },\n onwardInlandRouting: {\n PARENTS : { Transports: {} },\n DEFAULT : { $ref: '#/components/schemas/OnwardInlandRouting' },\n },\n OnwardInlandRouting: {\n DEFAULT : { type: 'object', title: 'Onward Inland Routing', CHILDREN: ['locationName','facilityName','address','addressLines','facility','UNLocationCode'] },\n },\n oogUnits: {\n DEFAULT : { type: 'integer', format: 'int32', minimum: '0' },\n },\n servcieEventTypeCode: {\n DEFAULT : { type: 'string', enum: ['STRT', 'CMPL', 'ARRI', 'DEPA'] },\n },\n operatorCarrierCode: {\n PARENTS : { Vessel: {}, Barge: {} },\n DEFAULT : { type: 'string', maxLength: 10 },\n },\n operatorCarrierCodeListProvider: {\n PARENTS : { Vessel: {}, Barge: {} },\n DEFAULT : { type: 'string', enum: ['SMDG', 'NMFTA'] },\n },\n originChargesPaymentTerm: {\n PARENTS : { CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {}, CreateShippingInstructions: {}, UpdateShippingInstructions: {}, ShippingInstructions: {}, updatedShippingInstructions: {}, shippingInstructions: {} },\n DEFAULT : { $ref: '#/components/schemas/OriginChargesPaymentTerm' },\n },\n OriginChargesPaymentTerm: {\n DEFAULT : { type: 'object', title: 'Origin Charges Payment Term', CHILDREN: ['haulageChargesPaymentTermCode','portChargesPaymentTermCode','otherChargesPaymentTermCode'] },\n },\n OuterPackaging: {\n 'BKG_v2.0.x' : { DEFAULT: { required: null, CHILDREN: ['packageCode','imoPackagingCode','numberOfPackages','description','dangerousGoods'] } },\n// 'BKG_v2.0.1' : { DEFAULT: { required: null, CHILDREN: ['packageCode','imoPackagingCode','numberOfPackages','description','dangerousGoods'] } },\n// 'BKG_v2.0.2' : { DEFAULT: { required: null, CHILDREN: ['packageCode','imoPackagingCode','numberOfPackages','description','dangerousGoods'] } },\n DEFAULT : { type: 'object', title: 'Outer Packaging', required: ['numberOfPackages', 'description'], CHILDREN: ['packageCode','imoPackagingCode','numberOfPackages','description','woodDeclaration','dangerousGoods'] },\n },\n outerPackaging: {\n PARENTS : { CargoItemHBL: { $ref: '#/components/schemas/OuterPackagingHBL' }, CommodityShipper: {$ref: '#/components/schemas/OuterPackaging'}, Commodity: {$ref: '#/components/schemas/OuterPackaging'}, CargoItemCarrier: {$ref: '#/components/schemas/OuterPackaging'}, CargoItemShipper: {$ref: '#/components/schemas/OuterPackagingShipper'}, CargoItem: {$ref: '#/components/schemas/OuterPackaging'} },\n },\n OuterPackagingHBL: {\n DEFAULT : { type: 'object', title: 'Outer Packaging (House B/L)', required: ['packageCode'], CHILDREN: ['packageCode','numberOfPackages', 'shippingMarks', 'UNNumber'] },\n },\n OuterPackagingShipper: {\n DEFAULT : { type: 'object', title: 'Outer Packaging (Shipper)', required: ['numberOfPackages', 'description'], CHILDREN: ['packageCode','numberOfPackages','description','woodDeclaration'] },\n },\n other: {\n 'BKG_v2.0.x' : { PARENTS: { DocumentParties: {}, DocumentPartiesReq: {} } },\n// 'BKG_v2.0.1' : { PARENTS: { DocumentParties: {}, DocumentPartiesReq: {} } },\n// 'BKG_v2.0.2' : { PARENTS: { DocumentParties: {}, DocumentPartiesReq: {} } },\n PARENTS : { DocumentParties: {}, DocumentPartiesShippingInstructions: { items: {$ref: '#/components/schemas/OtherDocumentPartyShippingInstructions'} }, DocumentPartiesHouseBL: {items: { $ref: '#/components/schemas/OtherDocumentPartyHBL'} } },\n DEFAULT : { type: 'array', items: {$ref: '#/components/schemas/OtherDocumentParty'} },\n },\n otherChargesPaymentTermCode: {\n PARENTS : { OriginChargesPaymentTerm: {}, DestinationChargesPaymentTerm: {} },\n DEFAULT : { type: 'string', enum: ['PRE', 'COL'] },\n },\n OtherDocumentParty: {\n DEFAULT : { type: 'object', title: 'Other Document Party', required: ['party', 'partyFunction'], CHILDREN: ['party','partyFunction'] },\n },\n OtherDocumentPartyHBL: {\n DEFAULT : { type: 'object', title: 'Other Document Party (House B/L)', required: ['party', 'partyFunction'], CHILDREN: ['party','partyFunction'] },\n },\n OtherDocumentPartyShippingInstructions: {\n DEFAULT : { type: 'object', title: 'Other Document Party (Shipping Instructions)', required: ['party', 'partyFunction'], CHILDREN: ['party','partyFunction'] },\n },\n OtherTransport: {\n DEFAULT : { type: 'object', title: 'Other Transport', additionalProperties: 'false', required: ['modeOfTransport'], CHILDREN: ['modeOfTransport'] },\n },\n packageCode: {\n PARENTS : { OuterPackaging: {}, OuterPackagingShipper: {}, OuterPackagingHBL: {} },\n DEFAULT : { type: 'string', minLength: 2, maxLength: 2, pattern: '^[A-Z0-9]{2}$' },\n },\n packingGroup: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { type: 'integer', format: 'int32', minimum: 1, maximum: 3 },\n },\n party: {\n PARENTS : { OtherDocumentParty: {}, OtherDocumentPartyShippingInstructions: { $ref: '#/components/schemas/PartyShipper' }, OtherDocumentPartyHBL: { $ref: '#/components/schemas/PartyHBL' } },\n DEFAULT : { $ref: '#/components/schemas/Party' },\n },\n Party: {\n DEFAULT : { type: 'object', title: 'Party', required: ['partyName'], CHILDREN: ['partyName','address','addressLines','identifyingCodes','taxLegalReferences','partyContactDetails', 'reference'] },\n },\n PartyShipper: {\n DEFAULT : { basedOn: 'Party', title: 'Party (Shipper provided)' },\n },\n PartyAddress: {\n DEFAULT : { type: 'object', title: 'Party Address', required: ['street', 'city', 'countryCode'], CHILDREN: ['street','streetNumber','floor','postCode','POBox', 'city','UNLocationCode','stateRegion','countryCode'] },\n },\n PartyHBL: {\n DEFAULT : { type: 'object', title: 'Party (House B/L)', required: ['partyName'], CHILDREN: ['partyName','address','identifyingCodes','taxLegalReferences','partyContactDetails', 'reference'] },\n },\n partyCode: {\n PARENTS : { IdentifyingCode: {}, identifyingCode: {} },\n DEFAULT : { type: 'string', maxLength: 150 },\n },\n partyContactDetails: {\n 'BKG_v2.0.x' : { DEFAULT: {items: {$ref: '#/components/schemas/PartyContactDetail'} },PARENTS: { CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {}, BookingAgent: {minItems: 1}, Shipper: {minItems: 1}, Consignee: {minItems: 1}, ServiceContractOwner: {minItems: 1}, CarrierBookingOffice: {minItems: 1}, Party: {minItems: 1} } },\n PARENTS : { Buyer: {items: {$ref: '#/components/schemas/PartyContactDetailWithPattern'}}, BuyerHBL: {items: {$ref: '#/components/schemas/PartyContactDetailHBL'}}, Seller: {items: {$ref: '#/components/schemas/PartyContactDetailWithPattern'}}, SellerHBL: {items: {$ref: '#/components/schemas/PartyContactDetailHBL'}}, CreateShippingInstructions: {minItems: 1}, UpdateShippingInstructions: {minItems: 1}, ShippingInstructions: {minItems: 1}, shippingInstructions: {minItems: 1}, updatedShippingInstructions: {minItems: 1}, Shipper: {}, ShipperShipper: {}, ShipperHBL: { items: {$ref: '#/components/schemas/PartyContactDetailHBL'} }, Consignee: {}, ConsigneeShipper: {}, ConsigneeHBL: { items: {$ref: '#/components/schemas/PartyContactDetailHBL'} }, Endorsee: {}, EndorseeShipper: {}, NotifyParty: {}, NotifyPartyShipper: {}, NotifyPartyHBL: { items: {$ref: '#/components/schemas/PartyContactDetailHBL'} }, Party: {}, PartyShipper: {}, PartyHBL: { items: {$ref: '#/components/schemas/PartyContactDetailHBL' } }, CarriersAgentAtDestination: {}, IssuingParty: {}, ShippingInstructionsRequestor: {}, TransportDocument: {minItems: 1}, transportDocument: { minItems: 1 } },\n DEFAULT : { type: 'array', items: {$ref: '#/components/schemas/PartyContactDetail'} },\n },\n PartyContactDetail: {\n DEFAULT : { type: 'object', title: 'Party Contact Detail', required: ['name'], CHILDREN: ['name'] },\n },\n PartyContactDetailHBL: {\n DEFAULT : { type: 'object', title: 'Party Contact Detail (House B/L)', required: ['name'], CHILDREN: ['name'] },\n },\n PartyContactDetailWithPattern: {\n DEFAULT : { type: 'object', title: 'Party Contact Detail (with phone pattern)', required: ['name'], CHILDREN: ['name'] },\n },\n partyFunction: {\n 'BKG_v2.0.0' : { PARENTS: { OtherDocumentParty: { pseudoEnum: ['DDR','DDS','COW','COX','N1','N2','NI'] } } },\n 'BKG_v2.0.x' : { PARENTS: { OtherDocumentParty: { pseudoEnum: ['DDR','DDS','COW','COX','N1','N2','NI','NAC','CSR'] } } },\n// 'BKG_v2.0.2' : { PARENTS: { OtherDocumentParty: { pseudoEnum: ['DDR','DDS','COW','COX','N1','N2','NI','NAC'] } } },\n PARENTS : { OtherDocumentParty: { pseudoEnum: ['DDR','DDS','COW','COX','SCO'] }, OtherDocumentPartyShippingInstructions: { pseudoEnum: ['DDR','DDS','COW','COX','SCO','CS','MF','WH'] }, OtherDocumentPartyHBL: { pseudoEnum: ['DDR','DDS','CS','MF','WH']} },\n DEFAULT : { type: 'string', maxLength: 3 },\n },\n partyName: {\n PARENTS : { BookingAgent: {}, Shipper: {}, ShipperShipper: {}, OnBehalfOfShipper: {}, OnBehalfOfShipperShipper: {}, ShipperHBL: {}, Consignee: {}, OnBehalfOfConsignee: {}, OnBehalfOfConsigneeShipper: {}, ConsigneeShipper: {}, ConsigneeHBL: {}, Endorsee: {}, EndorseeShipper: {}, ServiceContractOwner: {}, CarrierBookingOffice: {}, Party: {}, PartyShipper: {}, PartyHBL: {}, CarriersAgentAtDestination: {}, IssuingParty: {}, IssueToParty: {}, ActorParty: {}, RecipientParty: {}, SurrenderRequestedBy: {}, NotifyParty: {}, NotifyPartyShipper: {}, NotifyPartyHBL: {}, Seller: {}, SellerHBL: {}, Buyer: {}, BuyerHBL: {}, ReceiverValidationResponse: {}, ShippingInstructionsRequestor: {}, RepresentedActorParty: {}, RepresentedRecipientParty: {} },\n DEFAULT : { type: 'string', maxLength: 70, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n paymentTermCode: {\n PARENTS : { Charge: {} },\n DEFAULT : { type: 'string', enum: ['PRE', 'COL'] },\n },\n phone: {\n PARENTS : { PartyContactDetail: {}, PartyContactDetailHBL: { pattern: '^\\\\+(?:[0-9] ?){6,14}[0-9]$' }, PartyContactDetailWithPattern: { pattern: '^\\\\+(?:[0-9] ?){6,14}[0-9]$' }, EmergencyContactDetails: {} },\n DEFAULT : { type: 'string', maxLength: 30, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n placeOfAcceptance: {\n PARENTS : { HouseBillOfLading: {} },\n DEFAULT : { $ref: '#/components/schemas/PlaceOfAcceptance' },\n },\n PlaceOfAcceptance: {\n DEFAULT : { type: 'object', title: 'Place of Acceptance', CHILDREN: ['locationName','countryCode','UNLocationCode'] },\n },\n PlaceOfArrival: {\n DEFAULT : { type: 'object', title: 'Place of Arrival', required: ['facilityTypeCode','location','dateTime'], CHILDREN: ['transportCallReference','facilityTypeCode','location','dateTime'] },\n },\n placeOfBLIssue: {\n PARENTS : { CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {} },\n DEFAULT : { $ref: '#/components/schemas/PlaceOfBLIssue' },\n },\n PlaceOfBLIssue: {\n DEFAULT : { type: 'object', title: 'Place of B/L Issue', oneOf: {UNLocationCode: {}, countryCode: {} }, CHILDREN: ['locationName'] },\n },\n PlaceOfDeparture: {\n DEFAULT : { type: 'object', title: 'Place of Departure', required: ['facilityTypeCode','location','dateTime'], CHILDREN: ['transportCallReference','facilityTypeCode','location','dateTime'] },\n },\n placeOfFinalDelivery: {\n PARENTS : { HouseBillOfLading: {} },\n DEFAULT : { $ref: '#/components/schemas/PlaceOfFinalDelivery' },\n },\n PlaceOfFinalDelivery: {\n DEFAULT : { type: 'object', title: 'Place of Final Delivery', CHILDREN: ['locationName','countryCode','UNLocationCode'] },\n },\n placeOfIssue: {\n PARENTS : { CreateShippingInstructions: {}, UpdateShippingInstructions: {}, ShippingInstructions: {}, TransportDocument: {} },\n DEFAULT : { $ref: '#/components/schemas/PlaceOfIssue' },\n },\n PlaceOfIssue: {\n DEFAULT : { type: 'object', title: 'Place of Issue', oneOf: true, CHILDREN: ['locationName'] },\n },\n placeOfDelivery: {\n PARENTS : { Transports: {}, PointToPoint: {} },\n DEFAULT : { $ref: '#/components/schemas/PlaceOfDelivery' },\n },\n PlaceOfDelivery: {\n 'CS_v1.0.x' : { DEFAULT: { required: ['facilityTypeCode','location','dateTime'], CHILDREN: ['facilityTypeCode','location','dateTime'] } },\n// 'CS_v1.0.1' : { DEFAULT: { required: ['facilityTypeCode','location','dateTime'], CHILDREN: ['facilityTypeCode','location','dateTime'] } },\n DEFAULT : { type: 'object', title: 'Place of Delivery', CHILDREN: ['locationName','facilityName','address','addressLines','facility','UNLocationCode','geoCoordinate'] },\n },\n placeOfReceipt: {\n PARENTS : { Transports: {}, PointToPoint: {} },\n DEFAULT : { $ref: '#/components/schemas/PlaceOfReceipt' },\n },\n PlaceOfReceipt: {\n 'CS_v1.0.x' : { DEFAULT: { required: ['facilityTypeCode','location','dateTime'], CHILDREN: ['facilityTypeCode','location','dateTime'] } },\n// 'CS_v1.0.1' : { DEFAULT: { required: ['facilityTypeCode','location','dateTime'], CHILDREN: ['facilityTypeCode','location','dateTime'] } },\n DEFAULT : { type: 'object', title: 'Place of Receipt', CHILDREN: ['locationName','facilityName','address','addressLines','facility','UNLocationCode','geoCoordinate'] },\n },\n plannedArrivalDate: {\n PARENTS : { Transport: {}, Transports: {} },\n DEFAULT : { type: 'string', format: 'date' },\n },\n plannedDateTime: {\n DEFAULT : { type: 'string', format: 'date-time'}\n },\n plannedDepartureDate: {\n PARENTS : { Transport: {}, Transports: {} },\n DEFAULT : { type: 'string', format: 'date' },\n },\n pm10: {\n PARENTS : { footprint: {}, solutionFootprint: {} },\n DEFAULT : { type: 'number', format: 'double' },\n },\n POBox: {\n DEFAULT : { type: 'string', maxLength: 20 },\n },\n PointToPoint: {\n 'CS_v1.0.0' : { DEFAULT: { type: 'object', title: 'Point to Point', required: ['placeOfReceipt', 'placeOfDelivery', 'legs'], CHILDREN: ['placeOfReceipt','placeOfDelivery','receiptTypeAtOrigin','deliveryTypeAtDestination','cutOffTimes','solutionNumber','transitTime','legs'] } },\n DEFAULT : { type: 'object', title: 'Point to Point', required: ['placeOfReceipt', 'placeOfDelivery', 'legs'], CHILDREN: ['placeOfReceipt','placeOfDelivery','receiptTypeAtOrigin','deliveryTypeAtDestination','cutOffTimes','solutionNumber','routingReference','transitTime','solutionFootprint','legs'] },\n },\n portCall: {\n DEFAULT : { $ref: '#/components/schemas/PortCall' },\n },\n PortCall: {\n DEFAULT : { type: 'object', title: 'Port Call', required: ['portCallID', 'UNLocationCode','vessel'], CHILDREN: ['portCallID','portVisitReference','UNLocationCode','vessel','omitted','isFYI'] },\n },\n PortCalls: {\n DEFAULT : { type: 'array', items: { $ref: '#/components/schemas/PortCall' } },\n },\n portCallID: {\n DEFAULT : { type: 'string', format: 'uuid' },\n },\n portCallPhaseTypeCode: {\n DEFAULT : { type: 'string', enum: ['INBD', 'ALGS', 'SHIF', 'OUTB'], pseudoEnum: []}, // No validation added for description\n },\n PortCallServices: {\n DEFAULT : { type: 'array', items: { $ref: '#/components/schemas/PortCallService' } },\n },\n PortCallService: {\n DEFAULT : { type: 'object', title: 'Port Call Service', required: ['terminalCallID','portCallServiceID','portCallServiceTypeCode','portCallServiceEventTypeCode','portCallServiceLocation'], CHILDREN: ['terminalCallID','portCallServiceID','portCallServiceTypeCode','portCallServiceEventTypeCode','portCallPhaseTypeCode','facilityTypeCode','portCallServiceLocation','moves','cancelled','declined','isFYI'] },\n },\n portCallServiceEventTypeCode: {\n DEFAULT : { type: 'string', enum: ['STRT', 'CMPL', 'ARRI', 'DEPA'], pseudoEnum: []}, // No validation added for description\n },\n portCallServiceID: {\n DEFAULT : { type: 'string', format: 'uuid' },\n },\n portCallServiceLocation: {\n PARENTS : { PortCallService: { $ref: '#/components/schemas/PortCallServiceLocation' }, Timestamp: { $ref: '#/components/schemas/PortCallServiceLocationTimestamp' } },\n },\n PortCallServiceLocation: {\n DEFAULT : { type: 'object', title: 'Port Call Service Location', required: ['UNLocationCode'], CHILDREN: ['locationName','facility','UNLocationCode', 'geoCoordinate'] },\n },\n PortCallServiceLocationTimestamp: {\n DEFAULT : { type: 'object', title: 'Port Call Service Location (Timestamp)', required: ['UNLocationCode'], CHILDREN: ['locationName','facility','UNLocationCode', 'geoCoordinate'] },\n },\n portCallServiceTypeCode: {\n DEFAULT : { type: 'string', maxLength: 50, pattern: '^\\\\S(?:.*\\\\S)?$', pseudoEnum: []}, // No validation added for description\n },\n portChargesPaymentTermCode: {\n PARENTS : { OriginChargesPaymentTerm: {}, DestinationChargesPaymentTerm: {} },\n DEFAULT : { type: 'string', enum: ['PRE', 'COL'] },\n },\n portOfDischarge: {\n PARENTS : { Transports: {} },\n DEFAULT : { $ref: '#/components/schemas/PortOfDischarge' },\n },\n PortOfDischarge: {\n DEFAULT : { type: 'object', title: 'Port of Discharge', CHILDREN: ['locationName','city','UNLocationCode'] },\n },\n portOfLoading: {\n PARENTS : { Transports: {} },\n DEFAULT : { $ref: '#/components/schemas/PortOfLoading' },\n },\n PortOfLoading: {\n DEFAULT : { type: 'object', title: 'Port of Loading', CHILDREN: ['locationName','city','UNLocationCode'] },\n },\n PortSchedule: {\n DEFAULT : { type: 'object', title: 'Port Schedule', required: ['location'], CHILDREN: ['location', 'vesselSchedules'] },\n },\n PortScheduleLocation: {\n DEFAULT : { type: 'object', title: 'Port Schedule Location', CHILDREN: ['locationName','facilityName','UNLocationCode','facilitySMDGCode'] },\n },\n portVisitReference: {\n PARENTS : { TerminalTimestamp: {}, TerminalCall: {}, TransportCall: {}, VesselTransport: {}, BargeTransport: {}, PortCall: {}, },\n DEFAULT : { type: 'string', maxLength: 50 },\n },\n positionCode: {\n PARENTS : { Timestamp: {} },\n DEFAULT : { type: 'string', pseudoEnum: ['PBPL', 'BRTH', 'ANCH', 'PORT'] },\n },\n postCode: {\n 'OVS_v3.0.x' : { DEFAULT: { maxLength: 50 } },\n PARENTS : { Address: {}, address: {}, AddressHBL: {}, PartyAddress: {} },\n DEFAULT : { type: 'string', maxLength: 10 },\n },\n preCarriageBy: {\n PARENTS : { Transports: {} },\n DEFAULT : { type: 'string', maxLength: 50, pseudoEnum: ['VESSEL','RAIL','TRUCK','BARGE','MULTIMODAL'] },\n },\n previousEnvelopeTransferChainEntrySignedContentChecksum: {\n DEFAULT : { type: 'string', minLength: 64, maxLength: 64, pattern: '^[0-9a-f]+$' },\n },\n property: {\n PARENTS : { ErrorResponse: {}, Feedback: {}, DetailedError: {} },\n DEFAULT : { type: 'string', maxLength: 100 },\n },\n propertyPath: {\n PARENTS : { FeedbackElement: {} },\n DEFAULT : { type: 'string', maxLength: 1000 },\n },\n provider: {\n PARENTS : { EmergencyContactDetails: {} },\n DEFAULT : { type: 'string', maxLength: 255 },\n },\n properShippingName: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { type: 'string', maxLength: 250 },\n },\n providerCorrelationReference: {\n PARENTS : { ErrorResponse: {} },\n DEFAULT : { type: 'string', maxLength: 100 },\n },\n publisherRole: {\n DEFAULT : { type: 'string', enum: ['CA', 'AG', 'VSL', 'ATH', 'PLT', 'TWG', 'MOR', 'TR', 'LSH', 'BUK', 'SLU', 'SVP'] },\n },\n purchaseOrderReferences: {\n DEFAULT : { type: 'array', items: { type: 'string', maxLength: 35, pattern: '^\\\\S(?:.*\\\\S)?$' } },\n },\n quantity: {\n PARENTS : { InnerPackaging: { type: 'integer', format: 'int32' }, Charge: { type: 'number', format: 'float', minimum: '0' } },\n },\n reason: {\n 'JIT_v2.0.0' : { DEFAULT: { maxLength: 500 } },\n PARENTS : { CancelBookingRequest: {}, EnvelopeTransferFinishedResponse: {maxLength: 255}, IssuanceError: {maxLength: 255, pattern: '^\\\\S(?:.*\\\\S)?$'}, ShippingInstructions: {}, shippingInstructions: {}, updatedShippingInstructions: {}, ShippingInstructionsRefStatus: {}, ShippingInstructionsRefCancelStatus: {}, Booking: {}, booking: {}, amendedBooking: {}, data: {}, BookingRefStatus: {}, BookingRefCancelledStatus: {}, IssuanceResponse: {maxLength: 255, pattern: '^\\\\S(?:.*\\\\S)?$' } },\n DEFAULT : { type: 'string', maxLength: 5000 },\n },\n reasonCode: {\n DEFAULT : { type: 'string', maxLength: 4, pseudoEnum: ['SWTP', 'COD', 'SWI'] },\n },\n reeferPluggedContainerUnits: {\n DEFAULT : { $ref: '#/components/schemas/ReeferPluggedContainerUnits' }\n },\n ReeferPluggedContainerUnits: {\n DEFAULT : { type: 'object', title: 'Reefer Plugged Container Units', oneOf:true },\n },\n remark: {\n DEFAULT : { type: 'string', maxLength: 500 },\n },\n receiptTypeAtOrigin: {\n PARENTS : { CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {}, TransportDocument: {}, transportDocument: {}, PointToPoint: {} },\n DEFAULT : { type: 'string', maxLength: 3, enum: ['CY', 'SD', 'CFS'] },\n },\n receivedAdditionalDocumentChecksums: {\n DEFAULT : { type: 'array', items: { $ref: '#/components/schemas/DocumentChecksum' } },\n },\n receivedForShipmentDate: {\n PARENTS : { TransportDocument: {}, transportDocument: {} },\n DEFAULT : { type: 'string', format: 'date' },\n },\n ReceiverValidationResponse: {\n DEFAULT : { type: 'object', title: 'Receiver Validation Response', required: ['partyName'], CHILDREN: ['partyName'] },\n },\n recipient: {\n PARENTS : { EndorsementChainLink: {}, Transaction: {} },\n DEFAULT : { $ref: '#/components/schemas/RecipientParty' },\n },\n reference: {\n DEFAULT : { type: 'string', maxLength: 35, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n Reference: {\n DEFAULT : { type: 'object', title: 'Reference', required: ['type', 'value'], CHILDREN: ['type','value'] },\n },\n ReferenceConsignmentItem: {\n DEFAULT : { type: 'object', title: 'Reference (Consignment Item)', required: ['type', 'values'], CHILDREN: ['type','values'] },\n },\n referenceNumber: {\n PARENTS : { EmergencyContactDetails: {} },\n DEFAULT : { type: 'string', maxLength: 255 },\n },\n references: {\n PARENTS : { CreateShippingInstructions: {}, UpdateShippingInstructions: {}, ShippingInstructions: {}, updatedShippingInstructions: {}, shippingInstructions: {}, CreateBooking: { items: {$ref: '#/components/schemas/ReferenceShipper'} }, UpdateBooking: { items: {$ref: '#/components/schemas/ReferenceShipper'} }, Booking: {}, booking: {}, amendedBooking: {}, RequestedEquipment: {}, RequestedEquipmentShipper: { items: {$ref: '#/components/schemas/ReferenceShipper'} }, CommodityShipper: { items: {$ref: '#/components/schemas/ReferenceShipper'} }, Commodity: {}, ConsignmentItem: { items: {$ref: '#/components/schemas/ReferenceConsignmentItem'} }, ConsignmentItemShipper: { items: {$ref: '#/components/schemas/ReferenceConsignmentItem'} }, UtilizedTransportEquipmentCarrier: {}, UtilizedTransportEquipmentShipper: {}, TransportDocument: {}, transportDocument: {}, UtilizedTransportEquipment: {} },\n DEFAULT : { type: 'array', items: {$ref: '#/components/schemas/Reference'} },\n },\n ReferenceShipper: {\n DEFAULT : { type: 'object', title: 'Reference (Shipper)', required: ['type', 'value'], CHILDREN: ['type','value'] },\n },\n replyToTimestampID: {\n DEFAULT : { type: 'string', format: 'uuid' },\n },\n representedParty: {\n PARENTS : { RecipientParty: {$ref: '#/components/schemas/RepresentedRecipientParty'}, ActorParty: {$ref: '#/components/schemas/RepresentedActorParty'} },\n },\n RepresentedActorParty: {\n DEFAULT : { type: 'object', title: 'Represented Party', required: ['partyName'],CHILDREN: ['partyName','identifyingCodes'] },\n },\n RepresentedRecipientParty: {\n DEFAULT : { type: 'object', title: 'Represented Party', required: ['partyName'],CHILDREN: ['partyName','identifyingCodes'] },\n },\n RequestedCarrierCertificate: {\n DEFAULT : { type: 'string', maxLength: 100, title: 'Requested Carrier Certificate' },\n },\n RequestedCarrierClause: {\n DEFAULT : { type: 'string', maxLength: 100, title: 'Requested Carrier Clause' },\n },\n requestedCarrierCertificates: {\n PARENTS : { CreateShippingInstructions: {}, UpdateShippingInstructions: {}, ShippingInstructions: {}, updatedShippingInstructions: {}, shippingInstructions: {} },\n DEFAULT : { type: 'array', items: { type: 'string', maxLength: 100, pseudoEnum: ['SHIPMENT_VOYAGE_PARTICULARS_1','SHIPMENT_VOYAGE_PARTICULARS_2','SHIPMENT_VOYAGE_PARTICULARS_3','SHIPMENT_VOYAGE_PARTICULARS_4','SHIPMENT_VOYAGE_PARTICULARS_5','SHIPMENT_VOYAGE_PARTICULARS_6','SHIPMENT_VOYAGE_PARTICULARS_7','VESSEL_PARTICULARS_1','VESSEL_PARTICULARS_2','VESSEL_PARTICULARS_3','VESSEL_PARTICULARS_4','VESSEL_PARTICULARS_5','VESSEL_PARTICULARS_6','VESSEL_PARTICULARS_7','VESSEL_PARTICULARS_8','VESSEL_PARTICULARS_9','VESSEL_PARTICULARS_10','VESSEL_PARTICULARS_11','VESSEL_PARTICULARS_12','VESSEL_PARTICULARS_13','VESSEL_PARTICULARS_14','VESSEL_PARTICULARS_15','VESSEL_PARTICULARS_16','VESSEL_PARTICULARS_17','VESSEL_PARTICULARS_18'] } },\n },\n requestedCarrierClauses: {\n PARENTS : { CreateShippingInstructions: {}, UpdateShippingInstructions: {}, ShippingInstructions: {}, updatedShippingInstructions: {}, shippingInstructions: {} },\n DEFAULT : { type: 'array', items: { type: 'string', maxLength: 100, pseudoEnum: ['CARGO_CARGOSPECIFICS','VESSELCONVEYANCE_COUNTRYSPECIFIC','CARGO_RETURNOFEMPTYCONTAINER','CARGO_CARGOVALUE','CARGO_REEFERTEMPERATURE','CARGO_CONFLICTINGTEMPERATURES_MIXEDLOADS','SHIPPERSLOADSTOWWEIGHTANDCOUNT','INTRANSITCLAUSE'] } },\n },\n requestedDateTime: {\n DEFAULT : { type: 'string', format: 'date-time'}\n },\n RequestedEquipment: {\n 'BKG_v2.0.0' : { DEFAULT: { type: 'object', title: 'Requested Equipment', required: ['ISOEquipmentCode', 'units','isShipperOwned'], oneOf: true, CHILDREN: ['ISOEquipmentCode','units','containerPositionings','emptyContainerPickup','equipmentReferences','tareWeight','cargoGrossWeight','isShipperOwned','isNonOperatingReefer','activeReeferSettings','references','customsReferences', 'commodities'] } },\n 'BKG_v2.0.1' : { DEFAULT: { type: 'object', title: 'Requested Equipment', required: ['ISOEquipmentCode', 'units','isShipperOwned'], oneOf: true, CHILDREN: ['ISOEquipmentCode','units','containerPositionings','emptyContainerPickup','equipmentReferences','tareWeight','cargoGrossWeight','isShipperOwned','isNonOperatingReefer','activeReeferSettings','references','customsReferences', 'commodities'] } },\n DEFAULT : { type: 'object', title: 'Requested Equipment', required: ['ISOEquipmentCode', 'units','isShipperOwned'], oneOf: true, CHILDREN: ['ISOEquipmentCode','units','containerPositionings','emptyContainerPickup','originEmptyContainerPickup','fullContainerPickupDateTime','equipmentReferences','tareWeight','cargoGrossWeight','isShipperOwned','isNonOperatingReefer','activeReeferSettings','references','customsReferences', 'commodities'] },\n },\n RequestedEquipmentShipper: {\n 'BKG_v2.0.0' : { DEFAULT: { type: 'object', title: 'Requested Equipment (Shipper)', required: ['ISOEquipmentCode', 'units','isShipperOwned'], oneOf: true, CHILDREN: ['ISOEquipmentCode','units','containerPositionings','emptyContainerPickup','equipmentReferences','tareWeight','cargoGrossWeight','isShipperOwned','isNonOperatingReefer','activeReeferSettings','references','customsReferences', 'commodities'] } },\n 'BKG_v2.0.1' : { DEFAULT: { type: 'object', title: 'Requested Equipment (Shipper)', required: ['ISOEquipmentCode', 'units','isShipperOwned'], oneOf: true, CHILDREN: ['ISOEquipmentCode','units','containerPositionings','emptyContainerPickup','equipmentReferences','tareWeight','cargoGrossWeight','isShipperOwned','isNonOperatingReefer','activeReeferSettings','references','customsReferences', 'commodities'] } },\n DEFAULT : { type: 'object', title: 'Requested Equipment (Shipper)', required: ['ISOEquipmentCode', 'units','isShipperOwned'], oneOf: true, CHILDREN: ['ISOEquipmentCode','units','containerPositionings','emptyContainerPickup','originEmptyContainerPickup','fullContainerPickupDateTime','equipmentReferences','tareWeight','cargoGrossWeight','isShipperOwned','isNonOperatingReefer','activeReeferSettings','references','customsReferences','commodities'] },\n },\n requestedEquipments: {\n PARENTS : { CreateBooking: {items: {$ref: '#/components/schemas/RequestedEquipmentShipper'}}, UpdateBooking: {items: {$ref: '#/components/schemas/RequestedEquipmentShipper'}}, Booking: {items: {$ref: '#/components/schemas/RequestedEquipment'}}, booking: {items: {$ref: '#/components/schemas/RequestedEquipment'}}, amendedBooking: {items: {$ref: '#/components/schemas/RequestedEquipment'}} },\n DEFAULT : { type: 'array', minItems: 1 },\n },\n requestedNumberOfTransportDocuments: {\n DEFAULT : { type: 'integer', format: 'int32', minimum: 1 },\n },\n requestedOnCarriageModeOfTransport: {\n DEFAULT : { type: 'string', maxLength: 50, pseudoEnum: ['VESSEL','RAIL','TRUCK','BARGE','RAIL_TRUCK', 'BARGE_RAIL', 'BARGE_TRUCK','MULTIMODAL'] },\n },\n requestedPreCarriageModeOfTransport: {\n DEFAULT : { type: 'string', maxLength: 50, pseudoEnum: ['VESSEL','RAIL','TRUCK','BARGE','RAIL_TRUCK', 'BARGE_RAIL', 'BARGE_TRUCK','MULTIMODAL'] },\n },\n requestUri: {\n PARENTS : { ErrorResponse: {} },\n DEFAULT : { type: 'string' },\n },\n RequiredEquipment: {\n DEFAULT : { type: 'object', title: 'Equipment (Required Properties)', required: ['equipmentReference', 'ISOEquipmentCode', 'tareWeight'], CHILDREN: ['equipmentReference','ISOEquipmentCode','tareWeight'] },\n },\n responseCode: {\n DEFAULT : { type: 'string', enum: ['RECE','DUPE','BSIG','BENV','INCD','MDOC','DISE'] },\n },\n restows: {\n DEFAULT : { $ref: '#/components/schemas/Restows' },\n },\n Restows: {\n DEFAULT : { type: 'object', title: 'Restows', oneOf:true },\n },\n role: {\n PARENTS : { VesselVoyage: {} },\n DEFAULT : { type: 'string', maxLength: 30, pseudoEnum: ['FIRST_SEA_GOING', 'MOTHER'] },\n },\n routingOfConsignmentCountries: {\n DEFAULT : { type: 'array', minItems: 1, items: { type: 'string', maxLength: 2, minLength: 2, pattern: '^[A-Z]{2}$' } },\n },\n routingReference: {\n DEFAULT : { type: 'string', maxLength: 5000, pattern: '^\\\\S(?:.*\\\\S)?$', pseudoEnum: [] },\n },\n SADT: {\n PARENTS : { Limits: {} },\n DEFAULT : { type: 'number', format: 'float' },\n },\n SAPT: {\n PARENTS : { Limits: {} },\n DEFAULT : { type: 'number', format: 'float' },\n },\n Schedule: {\n DEFAULT : { type: 'object', title: 'Schedule', required: ['servicePartners', 'isDummyVessel', 'timestamps'] },\n },\n Seal: {\n DEFAULT : { type: 'object', title: 'Seal', required: ['number'], CHILDREN: ['number','source'] },\n },\n seals: {\n PARENTS : { UtilizedTransportEquipmentHBL: {}, UtilizedTransportEquipmentShipper: {}, UtilizedTransportEquipment: {} },\n DEFAULT : { type: 'array', minItems: 1, items: {$ref: '#/components/schemas/Seal'} },\n },\n segregationGroups: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { type: 'array', items: {type: 'string', maxLength: 2, pseudoEnum: ['1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18'] } },\n },\n selfFilerCode: {\n PARENTS : { AdvanceManifestFiling: {} },\n DEFAULT : { type: 'string', maxLength: 100, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n seller: {\n PARENTS : { DocumentParties: {}, DocumentPartiesShippingInstructions: {}, DocumentPartiesHouseBL: { $ref: '#/components/schemas/SellerHBL' } },\n DEFAULT : { $ref: '#/components/schemas/Seller' },\n },\n Seller: {\n DEFAULT : { type: 'object', title: 'Seller', required: ['partyName', 'typeOfPerson'], CHILDREN: ['partyName','typeOfPerson','address','addressLines','identifyingCodes','taxLegalReferences','partyContactDetails'] },\n },\n SellerHBL: {\n DEFAULT : { type: 'object', title: 'Seller (House B/L)', required: ['partyName', 'typeOfPerson'], CHILDREN: ['partyName','typeOfPerson','address','identifyingCodes','taxLegalReferences','partyContactDetails'] },\n },\n sendToPlatform: {\n PARENTS : { IssueToParty: {} },\n DEFAULT : { type: 'string', maxLength: 4, pattern: '^\\\\S+$', pseudoEnum: EBL_PLATFORM_SOLUTION_PROVIDERS },\n },\n sequenceNumber: {\n DEFAULT : { type: 'integer', format: 'int32' },\n },\n serviceContractOwner: {\n 'BKG_v2.0.x' : { PARENTS: { DocumentParties: {}, DocumentPartiesReq: {} } },\n// 'BKG_v2.0.1' : { PARENTS: { DocumentParties: {}, DocumentPartiesReq: {} } },\n// 'BKG_v2.0.2' : { PARENTS: { DocumentParties: {}, DocumentPartiesReq: {} } },\n PARENTS : { documentParties: {} },\n DEFAULT : { $ref: '#/components/schemas/ServiceContractOwner' },\n },\n ServiceContractOwner: {\n DEFAULT : { type: 'object', title: 'Service Contract Owner', required: ['partyName'], CHILDREN: ['partyName','address','addressLines','partyContactDetails','identifyingCodes','taxLegalReferences', 'reference'] },\n },\n serviceContractReference: {\n PARENTS : { CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {}, TransportDocument: {}, transportDocument: {} },\n DEFAULT : { type: 'string', maxLength: 30 },\n },\n ServicePartner: {\n 'OVS_HUB_REF_v1.0.0' : { DEFAULT: { type: 'object', title: 'Service Partner', required: [ 'carrierSMDGCode','carrierServiceCode' ], CHILDREN: ['carrierSMDGCode', 'carrierServiceName','carrierServiceCode'] } },\n DEFAULT : { type: 'object', title: 'Service Partner', CHILDREN: ['carrierCode','carrierCodeListProvider', 'carrierServiceName','carrierServiceCode','carrierImportVoyageNumber','carrierExportVoyageNumber'] },\n },\n ServicePartnerSchedule: {\n DEFAULT : { type: 'object', title: 'Service Partner Schedule', required: ['carrierServiceName','carrierServiceCode','carrierImportVoyageNumber','carrierExportVoyageNumber'], CHILDREN: ['carrierCode','carrierCodeListProvider','carrierServiceName','carrierServiceCode','carrierImportVoyageNumber','carrierExportVoyageNumber'] },\n },\n servicePartners: {\n PARENTS : { PartnerService: {items: {$ref: '#/components/schemas/ServicePartner' } }, Schedule: {}, VesselTransport: {minItems: null, items: {$ref: '#/components/schemas/ServicePartner' } }, BargeTransport: {minItems: null, items: {$ref: '#/components/schemas/ServicePartner' } } },\n DEFAULT : { type: 'array', minItems: 1, items: { $ref: '#/components/schemas/ServicePartnerSchedule' } },\n },\n ServiceSchedule: {\n 'OVS_v3.0.x' : { DEFAULT: { type: 'object', title: 'Service Schedule', required: ['carrierServiceCode','carrierServiceName'], CHILDREN: ['carrierServiceName','carrierServiceCode','universalServiceReference','vesselSchedules'] } },\n DEFAULT : { type: 'object', title: 'Service Schedule', required: ['carrierServiceName', 'carrierServiceCode', 'vesselSchedules'], CHILDREN: ['carrierServiceName','carrierServiceCode','universalServiceReference','vesselSchedules'] },\n },\n severity: {\n PARENTS : { Feedback: {}, FeedbackElement: {} },\n DEFAULT : { type: 'string', maxLength: 50, pseudoEnum: ['INFO','WARN','ERROR'] },\n },\n shipmentCutOffTimes: {\n PARENTS : { Booking: {}, booking: {}, amendedBooking: {} },\n DEFAULT : { type: 'array', items: {$ref: '#/components/schemas/ShipmentCutOffTime'} },\n },\n ShipmentCutOffTime: {\n DEFAULT : { type: 'object', title: 'Shipment Cut-Off Time', required: ['cutOffDateTimeCode', 'cutOffDateTime'], CHILDREN: ['cutOffDateTimeCode','cutOffDateTime'] },\n },\n ShipmentLocation: {\n DEFAULT : { type: 'object', title: 'Shipment Location', required: ['location', 'locationTypeCode'], CHILDREN: ['location','locationTypeCode', 'departingVesselVoyage'] },\n },\n shipmentLocations: {\n PARENTS : { CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {} },\n DEFAULT : { type: 'array', minItems: 1, items: {$ref: '#/components/schemas/ShipmentLocation'} },\n },\n shippedOnBoardDate: {\n PARENTS : { TransportDocument: {}, transportDocument: {} },\n DEFAULT : { type: 'string', format: 'date' },\n },\n shipper: {\n 'BKG_v2.0.x' : { PARENTS: { DocumentParties: {}, DocumentPartiesReq: {} } },\n// 'BKG_v2.0.1' : { PARENTS: { DocumentParties: {}, DocumentPartiesReq: {} } },\n// 'BKG_v2.0.2' : { PARENTS: { DocumentParties: {}, DocumentPartiesReq: {} } },\n PARENTS : { DocumentParties: {}, DocumentPartiesShippingInstructions: { $ref: '#/components/schemas/ShipperShipper' }, DocumentPartiesHouseBL: {$ref: '#/components/schemas/ShipperHBL'} },\n DEFAULT : { $ref: '#/components/schemas/Shipper' },\n },\n Shipper: {\n 'BKG_v2.0.x' : { DEFAULT: { CHILDREN: ['partyName','eblPlatform','address','addressLines','partyContactDetails','identifyingCodes','taxLegalReferences', 'reference', 'purchaseOrderReferences'] } },\n// 'BKG_v2.0.1' : { DEFAULT: { CHILDREN: ['partyName','address','partyContactDetails','identifyingCodes','taxLegalReferences', 'reference', 'purchaseOrderReferences'] } },\n// 'BKG_v2.0.2' : { DEFAULT: { CHILDREN: ['partyName','address','partyContactDetails','identifyingCodes','taxLegalReferences', 'reference', 'purchaseOrderReferences'] } },\n DEFAULT : { type: 'object', title: 'Shipper', required: ['partyName'], CHILDREN: ['partyName','eblPlatform','typeOfPerson','address','addressLines','displayedAddress','identifyingCodes','taxLegalReferences','partyContactDetails', 'reference', 'purchaseOrderReferences'] },\n },\n ShipperShipper: {\n DEFAULT : { basedOn: 'Shipper', title: 'Shipper (Shipper provided)' },\n },\n ShipperHBL: {\n DEFAULT : { type: 'object', title: 'Shipper (House B/L)', required: ['partyName', 'typeOfPerson'], CHILDREN: ['partyName','typeOfPerson','address','identifyingCodes','taxLegalReferences','partyContactDetails'] },\n },\n ShippingInstructions: {\n DEFAULT : { type: 'object', title: 'Shipping Instructions', required: ['shippingInstructionsStatus', 'transportDocumentTypeCode', 'isShippedOnBoardType', 'isElectronic', 'isToOrder', 'freightPaymentTermCode', 'partyContactDetails', 'documentParties', 'isCargoDeliveredInICS2Zone', 'consignmentItems', 'utilizedTransportEquipments'] },\n },\n shippingInstructions: {\n PARENTS : { ShippingInstructionsData: {} },\n DEFAULT : { $ref: '#/components/schemas/ShippingInstructionsFullNotification' },\n },\n ShippingInstructionsData: {\n DEFAULT : { type: 'object', title: 'Shipping Instructions Data', required: ['shippingInstructionsStatus'], CHILDREN: ['shippingInstructionsStatus', 'updatedShippingInstructionsStatus', 'shippingInstructionsReference', 'transportDocumentReference','transportDocumentSubReference', 'feedbacks', 'shippingInstructions', 'updatedShippingInstructions'] }\n },\n ShippingInstructionsFullNotification: {\n DEFAULT : { type: 'object', title: 'Shipping Instructions Full Notification', allOf: true },\n },\n ShippingInstructionsNotification: {\n DEFAULT : { type: 'object', title: 'Shipping Instructions Notification', required: ['specversion', 'id', 'source', 'type', 'time', 'datacontenttype', 'subscriptionReference', 'data']},\n },\n shippingInstructionsReference: {\n PARENTS : { CreateShippingInstructionsResponse: {}, UpdateShippingInstructions: {}, ShippingInstructions: {}, updatedShippingInstructions: {}, shippingInstructions: {}, ShippingInstructionsRefStatus: {}, ShippingInstructionsRefCancelStatus: {}, TransportDocument: {}, transportDocument: {}, ShippingInstructionsData: {}, TransportDocumentData: {} },\n DEFAULT : { type: 'string', maxLength: 100, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n ShippingInstructionsRefCancelStatus: {\n DEFAULT : { type: 'object', title: 'Shipping Instructions Cancel Response', required: ['shippingInstructionsStatus'] },\n },\n ShippingInstructionsRefStatus: {\n DEFAULT : { type: 'object', title: 'Shipping Instructions Response', required: ['shippingInstructionsStatus'] },\n },\n shippingInstructionsRequestor: {\n PARENTS : { DocumentPartiesShippingInstructions: {} },\n DEFAULT : { $ref: '#/components/schemas/ShippingInstructionsRequestor' },\n },\n ShippingInstructionsRequestor: {\n DEFAULT : { type: 'object', title: 'Shipping Instructions Requestor', required: ['partyName'], CHILDREN: ['partyName','address','addressLines','identifyingCodes','partyContactDetails'] },\n },\n shippingInstructionsRevisionNumber: {\n DEFAULT : { type: 'integer' },\n },\n shippingInstructionsStatus: {\n PARENTS : { CancelShippingInstructionsUpdate: { pseudoEnum: [] }, ShippingInstructions: {}, shippingInstructions: {}, updatedShippingInstructions: {}, ShippingInstructionsRefStatus: {}, ShippingInstructionsRefCancelStatus: {}, ShippingInstructionsData: {} },\n DEFAULT : { type: 'string', maxLength: 50, pseudoEnum: ['RECEIVED','PENDING_UPDATE','COMPLETED', 'CANCELLED', 'DECLINED'] },\n },\n shippingMarks: {\n PARENTS : { OuterPackagingHBL: {type: 'string', maxItems: null, maxLength: 512, items: null}, ConsignmentItem: {}, ConsignmentItemShipper: {}, UtilizedTransportEquipment: {}, UtilizedTransportEquipmentShipper: {} },\n DEFAULT : { type: 'array', maxItems: 50, items: {type: 'string', maxLength: 35 } },\n },\n shippingMarksForCustoms: {\n PARENTS : { ConsignmentItemShipper: {} },\n DEFAULT : { type: 'array', maxItems: 50, items: {type: 'string', maxLength: 35 } },\n },\n signatureHash: {\n DEFAULT : { type: 'string', pattern: '^[0-9a-f]+$', maxLength: 64, minLength: 64 },\n },\n size: {\n PARENTS : { DocumentMetadata: {} },\n DEFAULT : { type: 'number', minimum: 1 }\n },\n sox: {\n PARENTS : { footprint: {}, solutionFootprint: {} },\n DEFAULT : { type: 'number', format: 'double' },\n },\n solutionFootprint: {\n DEFAULT : { type: 'object', CHILDREN: ['co2','co2e','sox','nox','pm10'] }\n },\n solutionNumber: {\n PARENTS : { PointToPoint: {} },\n DEFAULT : { type: 'integer', format: 'int32', minimum: 1 }\n },\n source: {\n // Removing DCSA_CLOUDEVENT_GROUP in the default in order to handle 'source' inside a 'Seal'\n PARENTS : { ShippingInstructionsNotification: {maxLength: 4096}, TransportDocumentNotification: {maxLength: 4096}, BookingNotification: {maxLength: 4096}, ArrivalNoticeNotification: {maxLength: 4096}, Seal: {enum: ['CAR', 'SHI', 'VET', 'CUS'] } },\n DEFAULT : { type: 'string' },\n },\n SpecificUnits: {\n DEFAULT : { type: 'object', title: 'Specific Units (for load and discharge)', CHILDREN: ['loadUnits', 'dischargeUnits'] },\n },\n specialCertificateNumber: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { type: 'string', maxLength: 255 },\n },\n specversion: {\n PARENTS : DCSA_CLOUDEVENT_GROUP,\n DEFAULT : { type: 'string', enum: ['1.0'], pseudoEnum: [] },\n },\n stateRegion: {\n PARENTS : { Address:{}, address: {}, AddressHBL: {}, PartyAddress: {}, City: {} },\n DEFAULT : { type: 'string', maxLength: 65 },\n },\n statusCode: {\n 'OVS_v3.0.2' : { PARENTS: { ErrorResponse: {}, TransportCall: { type: 'string', format: null, pseudoEnum: ['OMIT','BLNK','ADHO','PHOT','PHIN','SLID','ROTC','CUTR'], deprecated: true } }, },\n 'OVS_v3.0.1' : { PARENTS: { ErrorResponse: {}, TransportCall: { type: 'string', format: null, pseudoEnum: ['OMIT','BLNK','ADHO','PHOT','PHIN','SLID','ROTC','CUTR'], deprecated: true } }, },\n 'OVS_v3.0.0' : { PARENTS: { ErrorResponse: {}, TransportCall: { type: 'string', format: null, pseudoEnum: ['OMIT','BLNK','ADHO','PHOT','PHIN','SLID','ROTC','CUTR'] } }, },\n PARENTS : { ErrorResponse: {} },\n DEFAULT : { type: 'integer', format: 'int32' },\n },\n statusCodes: {\n DEFAULT : { type: 'array', items: { type: 'string', pseudoEnum: ['OMIT','BLNK','ADHO','PHOT','PHIN','SLID','ROTC','CUTR','DRYD','BUNK','OOSV'] } },\n },\n statusCodeMessage: {\n PARENTS : { ErrorResponse: {} },\n DEFAULT : { type: 'string', maxLength: 200 },\n },\n statusCodeText: {\n PARENTS : { ErrorResponse: {} },\n DEFAULT : { type: 'string', maxLength: 50 },\n },\n street: {\n 'OVS_v3.0.x' : { DEFAULT: { maxLength: 100 } },\n PARENTS : { Address: {}, address: {}, AddressHBL: {}, PartyAddress: {} },\n DEFAULT : { type: 'string', maxLength: 70 },\n },\n streetNumber: {\n PARENTS : { Address: {}, address: {}, AddressHBL: {}, PartyAddress: {} },\n DEFAULT : { type: 'string', maxLength: 50 },\n },\n subFacility: {\n DEFAULT : { type: 'string', pattern: '^\\\\S(?:.*\\\\S)?$', maxLength: 100},\n },\n subscriptionReference: {\n PARENTS : DCSA_CLOUDEVENT_GROUP,\n DEFAULT : { type: 'string', pattern: '^\\\\S(?:.*\\\\S)?$', maxLength: 100},\n },\n subsidiaryRisk1: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { type: 'string', minLength: 1, maxLength: 3, pattern: '^[0-9](\\\\.[0-9])?$' },\n },\n subsidiaryRisk2: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { type: 'string', minLength: 1, maxLength: 3, pattern: '^[0-9](\\\\.[0-9])?$' },\n },\n identificationNumber: {\n DEFAULT : { type: 'string', pattern: '^\\\\S(?:.*\\\\S)?$', maxLength: 17 },\n },\n SupportingDocument: {\n DEFAULT : { type: 'object', title: 'Supporting Document', required: ['name', 'content'] },\n },\n supportingDocuments: {\n DEFAULT : { type: 'array', items: {$ref: '#/components/schemas/DocumentMetadata'} },\n },\n SurrenderRequestAnswer: {\n DEFAULT : { type: 'object', title: 'Surrender Request Answer', required: ['surrenderRequestReference', 'action'] },\n },\n surrenderRequestCode: {\n DEFAULT : { type: 'string', enum: ['SREQ', 'AREQ'] },\n },\n SurrenderRequestDetails: {\n DEFAULT : { type: 'object', title: 'Surrender Request Details', required: ['surrenderRequestReference','transportDocumentReference','surrenderRequestCode'] },\n },\n // SurrenderRequestedBy should be deleted\n SurrenderRequestedBy: {\n DEFAULT : { type: 'object', title: 'Surrender Requested By', required: ['partyName', 'eblPlatform'] },\n },\n surrenderRequestReference: {\n DEFAULT : { type: 'string', maxLength: 100, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n tareWeight: {\n PARENTS : { Equipment: {}, RequestedEquipment: {}, RequestedEquipmentShipper: {}, RequiredEquipment: {} },\n DEFAULT : { $ref: '#/components/schemas/TareWeight' },\n },\n TareWeight: {\n DEFAULT : { type: 'object', title: 'Tare Weight', required: ['value','unit'], CHILDREN: ['value','unit'] },\n },\n tareWeightUnit: {\n PARENTS : { RequestedEquipment: {}, RequestedEquipmentShipper: {} },\n DEFAULT : { type: 'string', enum: ['KGM', 'LBR'] },\n },\n TaxLegalReference: {\n DEFAULT : { type: 'object', title: 'Tax & Legal Reference', required: ['type', 'countryCode', 'value'], CHILDREN: ['type','countryCode','value'] },\n },\n taxLegalReferences: {\n PARENTS : { BookingAgent: {}, Shipper: {}, ShipperShipper: {}, ShipperHBL: {}, Consignee: {}, ConsigneeShipper: {}, ConsigneeHBL: {}, Endorsee: {}, EndorseeShipper: {}, ServiceContractOwner: {}, Party: {}, PartyShipper: {}, PartyHBL: {}, IssuingParty: {}, IssueToParty: {}, ActorParty: {}, RecipientParty: {}, SurrenderRequestedBy: {}, NotifyParty: {}, NotifyPartyShipper: {}, NotifyPartyHBL: {}, Seller: {}, SellerHBL: {}, Buyer: {}, BuyerHBL: {} },\n DEFAULT : { type: 'array', items: {$ref: '#/components/schemas/TaxLegalReference'} },\n },\n technicalName: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { type: 'string', maxLength: 250 },\n },\n temperatureSetpoint: {\n PARENTS : { ActiveReeferSettings: {} },\n DEFAULT : { type: 'number', format: 'float' },\n },\n temperatureUnit: {\n PARENTS : { ActiveReeferSettings: {}, Limits: {} },\n DEFAULT : { type: 'string', enum: ['CEL', 'FAH'] },\n },\n terminalCall: {\n DEFAULT : { $ref: '#/components/schemas/TerminalCall' },\n },\n TerminalCall: {\n DEFAULT : { type: 'object', title: 'Terminal Call', required: ['terminalCallID','portCallID','carrierServiceName','carrierServiceCode'], CHILDREN: ['terminalCallID','portCallID', 'terminalCallReference', 'terminalCallSequenceNumber','carrierServiceName','carrierServiceCode','universalServiceReference','carrierImportVoyageNumber','carrierExportVoyageNumber','universalImportVoyageReference','universalExportVoyageReference','omitted','isFYI'] },\n },\n TerminalCalls: {\n DEFAULT : { type: 'array', items: { $ref: '#/components/schemas/TerminalCall' } },\n },\n terminalCallID: {\n DEFAULT : { type: 'string', format: 'uuid' },\n },\n terminalCallReference: {\n PARENTS : { TerminalCall: {} },\n DEFAULT : { type: 'string', maxLength: 100 },\n },\n terminalCallSequenceNumber: {\n DEFAULT : { type: 'integer', format: 'int32' },\n },\n TerminalTimestamp: {\n DEFAULT : { type: 'object', title: 'Terminal Timestamp', required: ['vesselOperatorSMDGLinerCode','timestampClassifierCode','timestampTypeCode','timestampPositionCode','timestampDateTime'] },\n },\n termsAndConditions: {\n PARENTS : { Booking: {}, booking: {}, amendedBooking: {}, TransportDocument: {}, transportDocument: {} },\n DEFAULT : { type: 'string', maxLength: 50000 },\n },\n time: {\n PARENTS : DCSA_CLOUDEVENT_GROUP,\n DEFAULT : { type: 'string', format: 'date-time'},\n },\n Timestamp: {\n 'OVS_HUB_TER_v1.0.x' : { DEFAULT: { required: ['typeCode', 'classifierCode', 'positionCode', 'dateTime'], CHILDREN: ['typeCode', 'classifierCode', 'positionCode', 'dateTime'] } },\n 'OVS_v3.0.x' : { DEFAULT: { required: ['eventClassifierCode', 'eventDateTime','eventTypeCode'], CHILDREN: ['eventTypeCode','eventClassifierCode','eventDateTime','delayReasonCode','delayReasonCodes','changeRemark', 'facilityTypeCode']} },\n 'JIT_v2.0.0' : { DEFAULT: { required: ['timestampID','portCallServiceID','classifierCode','dateTime'], CHILDREN: ['timestampID','replyToTimestampID','portCallServiceID','classifierCode','dateTime','portCallServiceLocation','delayReasonCode','remark','isFYI'] } },\n DEFAULT : { type: 'object', title: 'Timestamp', required: ['eventTypeCode', 'eventClassifierCode', 'eventDateTime'], CHILDREN: ['eventTypeCode','eventClassifierCode','eventDateTime'] },\n },\n timestampClassifierCode: {\n PARENTS : { TerminalTimestamp: {} },\n DEFAULT : { type: 'string', enum: ['ACT','EST'] },\n },\n timestampDateTime: {\n PARENTS : { TerminalTimestamp: {} },\n DEFAULT : { type: 'string', format: 'date-time' },\n },\n timestampPositionCode: {\n PARENTS : { TerminalTimestamp: {} },\n DEFAULT : { type: 'string', pseudoEnum: ['PBPL', 'BRTH', 'ANCH', 'PORT'] },\n },\n timestampID: {\n DEFAULT : { type: 'string', format: 'uuid' },\n },\n timestampPositionCode: {\n PARENTS : { TerminalTimestamp: {} },\n DEFAULT : { type: 'string', pseudoEnum: ['PBPL', 'BRTH', 'ANCH', 'PORT'] },\n },\n timestamps: {\n 'OVS_v3.0.x' : { DEFAULT: { type: 'array', minItems: null, items: {$ref: '#/components/schemas/Timestamp'} } },\n PARENTS : { TransportCall: {}, TerminalCall: {}, Schedule: {}, PortCallService: { minItems: null } },\n DEFAULT : { type: 'array', minItems: 1, items: {$ref: '#/components/schemas/Timestamp'} },\n },\n Timestamps: {\n DEFAULT : { type: 'array', items: { $ref: '#/components/schemas/Timestamp' } },\n },\n timestampTypeCode: {\n DEFAULT : { basedOn: 'eventTypeCode' },\n },\n totalUnits: {\n DEFAULT : { type: 'integer', format: 'int32', minimum: '0' },\n },\n TotalEmptyUnits: {\n DEFAULT : { type: 'object', title: 'Total Empty Units', additionalProperties: 'false', required: ['totalUnits'], CHILDREN: ['totalUnits'] },\n },\n TotalLadenUnits: {\n DEFAULT : { type: 'object', title: 'Total Laden Units (Dry)', additionalProperties: 'false', required: ['totalUnits'], CHILDREN: ['totalUnits'] },\n },\n TotalReeferPluggedUnits: {\n DEFAULT : { type: 'object', title: 'Total Reefer Plugged Units', additionalProperties: 'false', required: ['totalUnits'], CHILDREN: ['totalUnits'] },\n },\n TotalUnits: {\n DEFAULT : { type: 'object', title: 'Total Units (Dry + Reefer + OOG)', additionalProperties: 'false', required: ['totalUnits'], CHILDREN: ['totalUnits'] },\n },\n totalRestows: {\n DEFAULT : { type: 'integer', format: 'int32', minimum: '0' },\n },\n TotalRestows: {\n DEFAULT : { type: 'object', title: 'Total units to restow', additionalProperties: 'false', required: ['totalRestows'], CHILDREN: ['totalRestows'] },\n },\n ActorParty: {\n DEFAULT : { type: 'object', title: 'Actor Party', required: ['partyName', 'eblPlatform', 'identifyingCodes'] },\n },\n RecipientParty: {\n DEFAULT : { type: 'object', title: 'Recipient Party', required: ['partyName', 'eblPlatform', 'identifyingCodes'] },\n },\n Transaction: {\n DEFAULT : { type: 'object', title: 'Transaction', required: ['actionCode','actor','actionDateTime'], CHILDREN: ['actionCode','actor','recipient','actionDateTime','reasonCode','comments','auditReference'] },\n },\n transactions: {\n DEFAULT : { type: 'array', minItems: 1, items: {$ref: '#/components/schemas/Transaction'} },\n },\n transitTime: {\n DEFAULT : { type: 'integer', format: 'int32' },\n },\n transport: {\n PARENTS : { Leg: {} },\n DEFAULT : { },\n },\n Transport: {\n DEFAULT : { type: 'object', title: 'Transport', required: ['transportPlanStage', 'transportPlanStageSequenceNumber', 'loadLocation', 'dischargeLocation', 'plannedDepartureDate', 'plannedArrivalDate'], CHILDREN: ['transportPlanStage','transportPlanStageSequenceNumber','loadLocation','dischargeLocation','plannedDepartureDate','plannedArrivalDate','modeOfTransport','vesselName','vesselIMONumber','carrierServiceCode','universalServiceReference','carrierImportVoyageNumber','universalImportVoyageReference','carrierExportVoyageNumber','universalExportVoyageReference'] },\n },\n transportCall: {\n DEFAULT : { $ref: '#/components/schemas/TransportCall' },\n },\n TransportCall: {\n 'OVS_HUB_TER_v1.0.x' : { DEFAULT: { required: ['carrierImportVoyageNumber','transportCallReference', 'timestamps'], CHILDREN: ['portVisitReference','transportCallReference','carrierImportVoyageNumber','carrierExportVoyageNumber','universalImportVoyageReference','universalExportVoyageReference','location','timestamps'] } },\n 'OVS_v3.0.2' : { DEFAULT: { type: 'object', title: 'Transport Call', required: ['carrierImportVoyageNumber','transportCallReference'], CHILDREN: ['portVisitReference','transportCallReference','carrierImportVoyageNumber','carrierExportVoyageNumber','universalImportVoyageReference','universalExportVoyageReference','location','statusCode','statusCodes','timestamps'] } },\n 'OVS_v3.0.1' : { DEFAULT: { type: 'object', title: 'Transport Call', required: ['carrierImportVoyageNumber','transportCallReference'], CHILDREN: ['portVisitReference','transportCallReference','carrierImportVoyageNumber','carrierExportVoyageNumber','universalImportVoyageReference','universalExportVoyageReference','location','statusCode','statusCodes','timestamps'] } },\n 'OVS_v3.0.0' : { DEFAULT: { type: 'object', title: 'Transport Call', required: ['carrierImportVoyageNumber','transportCallReference'], CHILDREN: ['portVisitReference','transportCallReference','carrierImportVoyageNumber','carrierExportVoyageNumber','universalImportVoyageReference','universalExportVoyageReference','location','statusCode','timestamps'] } },\n 'JIT_v2.0.0' : { DEFAULT: { type: 'object', title: 'Transport Call', required: ['transportCallID'], CHILDREN: ['transportCallID', 'transportCallReference', 'transportCallSequenceNumber','carrierImportVoyageNumber','carrierExportVoyageNumber','universalImportVoyageReference','universalExportVoyageReference','omitted'] } },\n DEFAULT : { type: 'object', title: 'Transport Call', required: ['transportCallReference', 'carrierImportVoyageNumber', 'timestamps'], CHILDREN: ['portVisitReference','transportCallReference','carrierImportVoyageNumber','carrierExportVoyageNumber','universalImportVoyageReference','universalExportVoyageReference','cutOffTimes','location','timestamps'] },\n },\n transportCallID: {\n DEFAULT : { type: 'string', format: 'uuid' },\n },\n transportCallReference: {\n 'OVS_HUB_TER_v1.0.0' : { DEFAULT: { pseudoEnum: [] } },\n PARENTS : { IntermediateCall: {}, TerminalTimestamp: {}, TerminalCall: {}, TransportCall: {}, VesselTransport: { deprecated: true }, BargeTransport: { deprecated: true }, PlaceOfArrival: {}, PlaceOfDeparture: {} },\n DEFAULT : { type: 'string', maxLength: 100 },\n },\n TransportCallLocation: {\n DEFAULT : { type: 'object', title: 'TransportCall Location', CHILDREN: ['locationName','facilityName','address','addressLines','UNLocationCode','facilitySMDGCode'] },\n },\n transportCalls: {\n 'OVS_HUB_TER_v1.0.x' : { DEFAULT: { minItems: 1 } },\n PARENTS : { VesselSchedule: {} },\n DEFAULT : { type: 'array', items: { $ref: '#/components/schemas/TransportCall' } },\n },\n transportCallSequenceNumber: {\n DEFAULT : { type: 'integer', format: 'int32' },\n },\n transportControlTemperature: {\n PARENTS : { Limits: {} },\n DEFAULT : { type: 'number', format: 'float' },\n },\n TransportDocument: {\n 'EBL_PINT_v3.0.0' : { DEFAULT: { $ref: '#/components/schemas/TransportDocument' } },\n 'EBL_v3.0.4' : { DEFAULT: { CHILDREN: ['transportDocumentReference','transportDocumentSubReference','shippingInstructionsReference','transportDocumentStatus','transportDocumentTypeCode','isShippedOnBoardType','freightPaymentTermCode','isElectronic','isToOrder','numberOfCopiesWithCharges','numberOfCopiesWithoutCharges','numberOfOriginalsWithCharges','numberOfOriginalsWithoutCharges','displayedNameForPlaceOfReceipt','displayedNameForPortOfLoad','displayedNameForPortOfDischarge','displayedNameForPlaceOfDelivery','shippedOnBoardDate','displayedShippedOnBoardReceivedForShipment','termsAndConditions','receiptTypeAtOrigin','deliveryTypeAtDestination','cargoMovementTypeAtOrigin','cargoMovementTypeAtDestination','issueDate','receivedForShipmentDate','serviceContractReference','contractQuotationReference','extendedContractQuotationReference','declaredValue','declaredValueCurrency','carrierCode','carrierCodeListProvider','carrierClauses','numberOfRiderPages','transports','charges','placeOfIssue','invoicePayableAt','partyContactDetails','documentParties','consignmentItems','utilizedTransportEquipments','exportLicense','importLicense','references','customsReferences','feedbacks'] } },\n 'EBL_v3.0.3' : { DEFAULT: { CHILDREN: ['transportDocumentReference','transportDocumentSubReference','shippingInstructionsReference','transportDocumentStatus','transportDocumentTypeCode','isShippedOnBoardType','freightPaymentTermCode','isElectronic','isToOrder','numberOfCopiesWithCharges','numberOfCopiesWithoutCharges','numberOfOriginalsWithCharges','numberOfOriginalsWithoutCharges','displayedNameForPlaceOfReceipt','displayedNameForPortOfLoad','displayedNameForPortOfDischarge','displayedNameForPlaceOfDelivery','shippedOnBoardDate','displayedShippedOnBoardReceivedForShipment','termsAndConditions','receiptTypeAtOrigin','deliveryTypeAtDestination','cargoMovementTypeAtOrigin','cargoMovementTypeAtDestination','issueDate','receivedForShipmentDate','serviceContractReference','contractQuotationReference','declaredValue','declaredValueCurrency','carrierCode','carrierCodeListProvider','carrierClauses','numberOfRiderPages','transports','charges','placeOfIssue','invoicePayableAt','partyContactDetails','documentParties','consignmentItems','utilizedTransportEquipments','exportLicense','importLicense','references','customsReferences','feedbacks'] } },\n 'EBL_v3.0.2' : { DEFAULT: { CHILDREN: ['transportDocumentReference','transportDocumentSubReference','shippingInstructionsReference','transportDocumentStatus','transportDocumentTypeCode','isShippedOnBoardType','freightPaymentTermCode','isElectronic','isToOrder','numberOfCopiesWithCharges','numberOfCopiesWithoutCharges','numberOfOriginalsWithCharges','numberOfOriginalsWithoutCharges','displayedNameForPlaceOfReceipt','displayedNameForPortOfLoad','displayedNameForPortOfDischarge','displayedNameForPlaceOfDelivery','shippedOnBoardDate','displayedShippedOnBoardReceivedForShipment','termsAndConditions','receiptTypeAtOrigin','deliveryTypeAtDestination','cargoMovementTypeAtOrigin','cargoMovementTypeAtDestination','issueDate','receivedForShipmentDate','serviceContractReference','contractQuotationReference','declaredValue','declaredValueCurrency','carrierCode','carrierCodeListProvider','carrierClauses','numberOfRiderPages','transports','charges','placeOfIssue','invoicePayableAt','partyContactDetails','documentParties','consignmentItems','utilizedTransportEquipments','exportLicense','importLicense','references','customsReferences','feedbacks'] } },\n DEFAULT : { type: 'object', title: 'Transport Document', required: ['transportDocumentReference', 'transportDocumentStatus', 'transportDocumentTypeCode', 'isShippedOnBoardType', 'isElectronic', 'isToOrder', 'invoicePayableAt', 'partyContactDetails', 'documentParties', 'consignmentItems', 'utilizedTransportEquipments', 'termsAndConditions', 'receiptTypeAtOrigin', 'deliveryTypeAtDestination', 'cargoMovementTypeAtOrigin', 'cargoMovementTypeAtDestination', 'carrierCode', 'carrierCodeListProvider', 'transports'], CHILDREN: ['transportDocumentReference','transportDocumentSubReference','shippingInstructionsReference','transportDocumentStatus','transportDocumentTypeCode','isShippedOnBoardType','freightPaymentTermCode','isElectronic','isToOrder','numberOfCopiesWithCharges','numberOfCopiesWithoutCharges','numberOfOriginalsWithCharges','numberOfOriginalsWithoutCharges','displayedNameForPlaceOfReceipt','displayedNameForPortOfLoad','displayedNameForPortOfDischarge','displayedNameForPlaceOfDelivery','shippedOnBoardDate','displayedShippedOnBoardReceivedForShipment','termsAndConditions','receiptTypeAtOrigin','deliveryTypeAtDestination','cargoMovementTypeAtOrigin','cargoMovementTypeAtDestination','issueDate','receivedForShipmentDate','serviceContractReference','contractQuotationReference','extendedContractQuotationReference','declaredValue','declaredValueCurrency','carrierCode','carrierCodeListProvider','carrierClauses','numberOfRiderPages','transports','charges','placeOfIssue','invoicePayableAt','partyContactDetails','documentParties','consignmentItems','utilizedTransportEquipments','exportLicense','importLicense','references','customsReferences'] },\n },\n transportDocument: {\n PARENTS : { TransportDocumentData: {}, EblEnvelope: {$ref: '#/components/schemas/TransportDocument'} },\n DEFAULT : { $ref: '#/components/schemas/TransportDocumentFullNotification' }\n },\n TransportDocumentAmend: {\n DEFAULT : { type: 'object', title: 'Transport Document (Amend)', required: ['amendedTransportDocumentStatus', 'amendedTransportDocument'], CHILDREN: ['amendedTransportDocumentStatus', 'amendedTransportDocument'] },\n },\n transportDocumentChecksum: {\n DEFAULT : { type: 'string', minLength: 64, maxLength: 64, pattern: '^[0-9a-f]+$' },\n },\n TransportDocumentData: {\n DEFAULT : { type: 'object', title: 'Transport Document Data', required: ['transportDocumentStatus', 'transportDocumentReference'], CHILDREN: ['transportDocumentStatus', 'amendedTransportDocumentStatus', 'shippingInstructionsReference', 'transportDocumentReference','transportDocumentSubReference', 'feedbacks', 'transportDocument', 'amendedTransportDocument'] },\n },\n TransportDocumentFullNotification: {\n DEFAULT : { type: 'object', title: 'Transport Document Full Notification', allOf: true },\n },\n TransportDocumentRefStatus: {\n DEFAULT : { type: 'object', title: 'Transport Document Response', required: ['transportDocumentReference', 'transportDocumentStatus'] },\n },\n TransportDocumentNotification: {\n DEFAULT : { type: 'object', title: 'Transport Document Notification', required: ['specversion', 'id', 'source', 'type', 'time', 'datacontenttype', 'subscriptionReference', 'data'] },\n },\n transportDocumentReference: {\n 'BKG_v2.0.0' : {type: 'string', maxLength: 20, pattern: '^\\\\S(?:.*\\\\S)?$' },\n 'BKG_v2.0.1' : {type: 'string', maxLength: 20, pattern: '^\\\\S(?:.*\\\\S)?$' },\n PARENTS : { EndorsementChain: {}, ShippingInstructions: {}, shippingInstructions: {}, CreateShippingInstructions: {}, UpdateShippingInstructions: {}, updatedShippingInstructions: {}, ShippingInstructionsRefStatus: {}, ShippingInstructionsRefCancelStatus: {}, CreateBooking: { deprecated: true }, UpdateBooking: { deprecated: true }, Booking: { deprecated: true }, booking: {}, amendedBooking: {}, TransportDocument: {}, transportDocument: {}, TransportDocumentRefStatus: {}, IssuanceResponse: {}, SurrenderRequestAcknowledgement: {}, ShippingInstructionsData: {}, SurrenderRequestDetails: {}, TransportDocumentData: {} },\n DEFAULT : { type: 'string', maxLength: 20, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n transportDocumentReferences: {\n DEFAULT : { type: 'array', items: { type: 'string', maxLength: 20, pattern: '^\\\\S(?:.*\\\\S)?$' } },\n },\n transportDocumentSubReference: {\n PARENTS : { EndorsementChain: {}, ShippingInstructions: {}, shippingInstructions: {}, updatedShippingInstructions: {}, ShippingInstructionsRefStatus: {}, ShippingInstructionsRefCancelStatus: {}, CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {}, TransportDocument: {}, transportDocument: {}, TransportDocumentRefStatus: {}, IssuanceResponse: {}, SurrenderRequestAcknowledgement: {}, ShippingInstructionsData: {}, SurrenderRequestDetails: {}, TransportDocumentData: {} },\n DEFAULT : { type: 'string', maxLength: 100, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n transportDocumentStatus: {\n PARENTS : { ApproveTransportDocument: { pseudoEnum: [] }, TransportDocument: {}, transportDocument: {}, TransportDocumentRefStatus: {}, TransportDocumentData: {} },\n DEFAULT : { type: 'string', maxLength: 50, pseudoEnum: ['DRAFT','APPROVED','ISSUED','PENDING_SURRENDER_FOR_AMENDMENT','SURRENDERED_FOR_AMENDMENT','VOIDED','PENDING_SURRENDER_FOR_DELIVERY','SURRENDERED_FOR_DELIVERY'] },\n },\n transportDocumentTypeCode: {\n PARENTS : { CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {}, CreateShippingInstructions: {}, UpdateShippingInstructions: {}, ShippingInstructions: {}, updatedShippingInstructions: {}, shippingInstructions: {}, TransportDocument: {}, transportDocument: {} },\n DEFAULT : { type: 'string', enum: ['BOL', 'SWB'] },\n },\n transportEmergencyTemperature: {\n PARENTS : { Limits: {} },\n DEFAULT : { type: 'number', format: 'float' },\n },\n transportPlan: {\n PARENTS : { Booking: {}, booking: {}, amendedBooking: {} },\n DEFAULT : { type: 'array', items: {$ref: '#/components/schemas/Transport'} },\n },\n transportPlanStage: {\n PARENTS : { Transport: {} },\n DEFAULT : { type: 'string', enum: ['PRC', 'MNC', 'ONC'] },\n },\n transportPlanStageSequenceNumber: {\n PARENTS : { Transport: {} },\n DEFAULT : { type: 'integer', format: 'int32' },\n },\n transports: {\n DEFAULT : { $ref: '#/components/schemas/Transports' },\n },\n Transports: {\n DEFAULT : { type: 'object', title: 'Transports', required: ['plannedArrivalDate', 'plannedDepartureDate', 'portOfLoading', 'portOfDischarge', 'vesselVoyages'], CHILDREN: ['plannedArrivalDate','plannedDepartureDate','preCarriageBy','onCarriageBy','placeOfReceipt','portOfLoading','portOfDischarge','placeOfDelivery','onwardInlandRouting','vesselVoyages'] },\n },\n type: {\n 'BKG_v2.0.x' : { PARENTS: {\n BookingNotification: {enum: ['org.dcsa.booking.v2'], pseudoEnum: [] },\n CustomsReference: {maxLength: 50, pattern: '^\\\\S(?:.*\\\\S)?$'},\n TaxLegalReference: {maxLength: 50, pattern: '^\\\\S(?:.*\\\\S)?$'},\n ReferenceShipper: {maxLength: 3, pseudoEnum: ['CR','AKG','AEF'] },\n Reference: {maxLength: 3, pseudoEnum: ['CR','ECR','AKG','AEF'] },\n NationalCommodityCode: {maxLength: 10, pattern: '^\\\\S(?:.*\\\\S)?$', pseudoEnum:['NCM','HTS','SCHEDULE_B','TARIC','CN','CUS'] },\n ExtendedNationalCommodityCode: {maxLength: 10, pattern: '^\\\\S(?:.*\\\\S)?$', pseudoEnum:['NCM','HTS','SCHEDULE_B','TARIC','CN','CUS'] },\n } },\n// 'BKG_v2.0.1' : { PARENTS: {\n// BookingNotification: {enum: ['org.dcsa.booking.v2'], pseudoEnum: [] },\n// CustomsReference: {maxLength: 50, pattern: '^\\\\S(?:.*\\\\S)?$'},\n// TaxLegalReference: {maxLength: 50, pattern: '^\\\\S(?:.*\\\\S)?$'},\n// ReferenceShipper: {maxLength: 3, pseudoEnum: ['CR','AKG','AEF'] },\n// Reference: {maxLength: 3, pseudoEnum: ['CR','ECR','AKG','AEF'] },\n// NationalCommodityCode: {maxLength: 10, pattern: '^\\\\S(?:.*\\\\S)?$', pseudoEnum:['NCM','HTS','SCHEDULE_B','TARIC','CN','CUS'] },\n// } },\n// 'BKG_v2.0.2' : { PARENTS: {\n// BookingNotification: {enum: ['org.dcsa.booking.v2'], pseudoEnum: [] },\n// CustomsReference: {maxLength: 50, pattern: '^\\\\S(?:.*\\\\S)?$'},\n// TaxLegalReference: {maxLength: 50, pattern: '^\\\\S(?:.*\\\\S)?$'},\n// ReferenceShipper: {maxLength: 3, pseudoEnum: ['CR','AKG','AEF'] },\n// Reference: {maxLength: 3, pseudoEnum: ['CR','ECR','AKG','AEF'] },\n// NationalCommodityCode: {maxLength: 10, pattern: '^\\\\S(?:.*\\\\S)?$', pseudoEnum:['NCM','HTS','SCHEDULE_B','TARIC','CN','CUS'] },\n// } },\n PARENTS : { \n CustomsReference: {maxLength: 50, pattern: '^\\\\S(?:.*\\\\S)?$'},\n Reference: {maxLength: 3, pseudoEnum: ['CR','AKG'] },\n ReferenceConsignmentItem: {maxLength: 3, pseudoEnum: ['CR','AKG','SPO','CPO'] },\n TaxLegalReference: {maxLength: 50, pattern: '^\\\\S(?:.*\\\\S)?$' },\n ArrivalNoticeNotification: {enum: ['org.dcsa.arrival-notice-notification.v1'], pseudoEnum: [] },\n TransportDocumentNotification: {enum: ['org.dcsa.transport-document.v3'], pseudoEnum: [] },\n ShippingInstructionsNotification: {enum: ['org.dcsa.shipping-instructions.v3'], pseudoEnum: [] },\n vessel: {enum: ['GCGO', 'CONT', 'RORO', 'CARC', 'PASS', 'FERY', 'BULK', 'TANK', 'LGTK', 'ASSI', 'PILO'] },\n NationalCommodityCode: {maxLength: 10, pattern: '^\\\\S(?:.*\\\\S)?$', pseudoEnum:['NCM','HTS','SCHEDULE_B','TARIC','CN','CUS'] },\n ExtendedNationalCommodityCode: {maxLength: 10, pattern: '^\\\\S(?:.*\\\\S)?$', pseudoEnum:['NCM','HTS','SCHEDULE_B','TARIC','CN','CUS'] },\n },\n DEFAULT : { type: 'string' },\n },\n typeCode: {\n 'OVS_HUB_TER_v1.0.x' : { DEFAULT: { enum: ['ARRI', 'DEPA'] } },\n PARENTS : { Vessel: { enum: ['GCGO', 'CONT', 'RORO', 'CARC', 'PASS', 'FERY', 'BULK', 'TANK', 'LGTK', 'ASSI', 'PILO'] } },\n DEFAULT : { type: 'string' },\n },\n typeOfPerson: {\n DEFAULT : { type: 'string', maxLength: 50, pattern: '^\\\\S(?:.*\\\\S)?$', pseudoEnum: ['NATURAL_PERSON','LEGAL_PERSON','ASSOCIATION_OF_PERSONS'] },\n },\n unit: {\n PARENTS : { \n CargoGrossWeight: {enum: ['KGM', 'LBR']},\n CargoNetWeight: {enum: ['KGM', 'LBR']},\n TareWeight: {enum: ['KGM', 'LBR']}, \n CargoNetVolume: {enum: ['MTQ', 'FTQ']}, \n CargoGrossVolume: {enum: ['MTQ', 'FTQ']}, \n NetVolume: {enum: ['MTQ', 'FTQ', 'LTR']}, \n CargoNetVolume: {enum: ['MTQ', 'FTQ']}, \n CargoGrossWeight: {enum: ['KGM', 'LBR']}, \n CargoGrossWeightReq: {enum: ['KGM', 'LBR']}, \n GrossWeight: {enum: ['KGM', 'LBR']}, \n CargoNetWeight: {enum: ['KGM', 'LBR']}, \n NetWeight: {enum: ['KGM', 'LBR']}, \n NetExplosiveContent: {enum: ['KGM', 'LBR', 'GRM', 'ONZ']} },\n DEFAULT : { type: 'string' },\n },\n units: {\n PARENTS : { ConfirmedEquipment: {}, RequestedEquipment: {}, RequestedEquipmentShipper: {} },\n DEFAULT : { type: 'integer', format: 'int32', minimum: 1 },\n },\n unitPrice: {\n PARENTS : { Charge: {} },\n DEFAULT : { type: 'number', format: 'float', minimum: '0' },\n },\n universalExportVoyageReference: {\n 'OVS_v3.0.x' : { DEFAULT: { type: 'string', minLength: null, maxLength: null, pattern: '^\\\\d{2}[0-9A-Z]{2}[NEWSR]$', pseudoEnum: [] } },\n PARENTS : { TerminalTimestamp: {}, CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {}, Transport: {}, VesselVoyage: {}, Schedule: {}, TerminalCall: {}, TransportCall: {}, VesselTransport: {}, BargeTransport: {}, departingVesselVoyage: {} },\n DEFAULT : { type: 'string', minLength: 5, maxLength: 5, pattern: '^\\\\d{2}[0-9A-Z]{2}[NEWSR]$', pseudoEnum: [] },\n },\n universalImportVoyageReference: {\n 'OVS_v3.0.x' : { DEFAULT: { type: 'string', minLength: null, maxLength: null, pattern: '^\\\\d{2}[0-9A-Z]{2}[NEWSR]$', pseudoEnum: [] } },\n PARENTS : { TerminalTimestamp: {}, Transport: {}, Schedule: {}, TerminalCall: {}, TransportCall: {}, VesselTransport: {}, BargeTransport: {} },\n DEFAULT : { type: 'string', minLength: 5, maxLength: 5, pattern: '^\\\\d{2}[0-9A-Z]{2}[NEWSR]$', pseudoEnum: [] },\n },\n universalServiceReference: {\n 'OVS_v3.0.x' : { DEFAULT: { type: 'string', minLength: null, maxLength: 8, pattern: '^SR\\\\d{5}[A-Z]$' } },\n PARENTS : { TerminalTimestamp: {}, TerminalCall: {}, CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {}, Transport: {}, Schedule: {}, ServiceSchedule: {}, VesselTransport: {}, BargeTransport: {}, departingVesselVoyage: { pseudoEnum: [] } },\n DEFAULT : { type: 'string', minLength: 8, maxLength: 8, pattern: '^SR\\\\d{5}[A-Z]$' },\n },\n UNLocationCode: {\n DEFAULT : { type: 'string', minLength: 5, maxLength: 5, pattern: '^[A-Z]{2}[A-Z2-9]{3}$', pseudoEnum: [] },\n },\n UNLocationLocation: {\n 'OVS_v3.0.x' : { DEFAULT: { type: 'object', title: 'UN Location', required: ['UNLocationCode','locationType'] } },\n },\n UNNumber: {\n DEFAULT : { type: 'string', minLength: 4, maxLength: 4, pattern: '^\\\\d{4}$' },\n },\n UpdateBooking: {\n DEFAULT : { type: 'object', title: 'Update Booking', required: ['receiptTypeAtOrigin', 'deliveryTypeAtDestination', 'cargoMovementTypeAtOrigin', 'cargoMovementTypeAtDestination', 'isEquipmentSubstitutionAllowed', 'shipmentLocations', 'requestedEquipments', 'documentParties'] },\n },\n UpdateShippingInstructions: {\n DEFAULT : { type: 'object', title: 'Update Shipping Instructions', required: ['shippingInstructionsReference', 'transportDocumentTypeCode', 'isShippedOnBoardType', 'isElectronic', 'isToOrder', 'freightPaymentTermCode', 'partyContactDetails', 'documentParties', 'isCargoDeliveredInICS2Zone', 'consignmentItems', 'utilizedTransportEquipments'] },\n },\n updatedShippingInstructions: {\n PARENTS : { ShippingInstructionsData: {} },\n DEFAULT : { $ref: '#/components/schemas/UpdatedShippingInstructionsFullNotification' },\n },\n UpdatedShippingInstructionsFullNotification: {\n DEFAULT : { type: 'object', title: 'Updated Shipping Instructions', allOf: true },\n },\n updatedShippingInstructionsStatus: {\n PARENTS : { CancelShippingInstructionsUpdate: { pseudoEnum: [] }, ShippingInstructions: {}, shippingInstructions: {}, updatedShippingInstructions: {}, ShippingInstructionsRefStatus: {}, ShippingInstructionsRefCancelStatus: {}, ShippingInstructionsData: {} },\n DEFAULT : { type: 'string', maxLength: 50, pseudoEnum: ['UPDATE_RECEIVED','UPDATE_CONFIRMED','UPDATE_CANCELLED','UPDATE_DECLINED'] },\n },\n UTEquipment: {\n DEFAULT : { type: 'object', title: 'Shipper Owned Equipment (SoC)', required: ['isShipperOwned', 'equipment'], CHILDREN: ['isShipperOwned','equipment'] },\n },\n UTEquipmentReference: {\n DEFAULT : { type: 'object', title: 'Carrier Owned Equipment', required: ['isShipperOwned', 'equipmentReference'], CHILDREN:['isShipperOwned','equipmentReference'] },\n },\n UtilizedTransportEquipment: {\n DEFAULT : { type: 'object', title: 'Utilized Transport Equipment', required: ['equipment', 'isShipperOwned', 'seals'], CHILDREN: ['equipment','isShipperOwned','isNonOperatingReefer','activeReeferSettings','shippingMarks','seals','references','customsReferences'] },\n },\n utilizedTransportEquipments: {\n PARENTS : { HouseBillOfLading: {items: {$ref: '#/components/schemas/UtilizedTransportEquipmentHBL'}}, CreateShippingInstructions: {items: {$ref: '#/components/schemas/UtilizedTransportEquipmentShipper'}}, UpdateShippingInstructions: {items: {$ref: '#/components/schemas/UtilizedTransportEquipmentShipper'}}, ShippingInstructions: {items: {$ref: '#/components/schemas/UtilizedTransportEquipmentShipper'}}, shippingInstructions: {items: {$ref: '#/components/schemas/UtilizedTransportEquipmentShipper'}}, updatedShippingInstructions: {items: {$ref: '#/components/schemas/UtilizedTransportEquipmentShipper'}}, TransportDocument: {items: {$ref: '#/components/schemas/UtilizedTransportEquipment'} }, transportDocument: { items: {$ref: '#/components/schemas/UtilizedTransportEquipment'} } },\n DEFAULT : { type: 'array', minItems: 1 },\n },\n UtilizedTransportEquipmentHBL: {\n DEFAULT : { type: 'object', title: 'Utilized Transport Equipment (House B/L)', required: ['emptyIndicatorCode','isShipperOwned','equipmentReference','ISOEquipmentCode'], oneOf: true, CHILDREN: ['seals','emptyIndicatorCode','isShipperOwned','equipmentReference','ISOEquipmentCode']},\n },\n UtilizedTransportEquipmentShipper: {\n DEFAULT : { type: 'object', title: 'Utilized Transport Equipment (Shipper)', required: ['seals'], oneOf: true, CHILDREN: ['shippingMarks','seals','emptyIndicatorCode','references','customsReferences']},\n },\n value: {\n PARENTS : {\n TareWeight: {type: 'number', format: 'float', minimum: '0', exclusiveMinimum: 'true'}, \n CargoGrossVolume: {type: 'number', format: 'float', minimum: '0', exclusiveMinimum: 'true'}, \n CargoNetVolume: {type: 'number', format: 'float', minimum: '0', exclusiveMinimum: 'true'},\n NetVolume: {type: 'number', format: 'float', minimum: '0', exclusiveMinimum: 'true'},\n CargoGrossWeightReq: {type: 'number', format: 'float', minimum: '0', exclusiveMinimum: 'true'}, \n CargoNetWeight: {type: 'number', format: 'float', minimum: '0', exclusiveMinimum: 'true'}, \n CargoGrossWeight: {type: 'number', format: 'float', minimum: '0', exclusiveMinimum: 'true'}, \n GrossWeight: {type: 'number', format: 'float', minimum: '0', exclusiveMinimum: 'true'}, \n CargoNetWeight: {type: 'number', format: 'float', minimum: '0', exclusiveMinimum: 'true'}, \n NetWeight: {type: 'number', format: 'float', minimum: '0', exclusiveMinimum: 'true'}, \n NetExplosiveContent: {type: 'number', format: 'float', minimum: '0', exclusiveMinimum: 'true'}, \n DetailedError: { type: 'string', maxLength: 500 },\n errors: {type: 'string', maxLength: 500}, \n TaxLegalReference: {type: 'string', maxLength: 35, pattern: '^\\\\S(?:.*\\\\S)?$'}, \n Reference: {type: 'string', maxLength: 35, pattern: '^\\\\S(?:.*\\\\S)?$'},\n ReferenceShipper: {type: 'string', maxLength: 35, pattern: '^\\\\S(?:.*\\\\S)?$'}, \n },\n },\n values: {\n PARENTS : { \n NationalCommodityCode: {}, \n ExtendedNationalCommodityCode: { items: {type: 'string', maxLength: 16, pattern: '^\\\\S(?:.*\\\\S)?$' } }, \n CustomsReference: { items: {type: 'string', maxLength: 35, pattern: '^\\\\S(?:.*\\\\S)?$' } },\n ReferenceConsignmentItem: { items: {type: 'string', maxLength: 35, pattern: '^\\\\S(?:.*\\\\S)?$' } },\n },\n DEFAULT : { type: 'array', minItems: 1, items: {type: 'string', maxLength: 10, pattern: '^\\\\S(?:.*\\\\S)?$' } },\n },\n vessel: {\n 'CS_v1.0.x' : { DEFAULT: { type: null, title: null, required: null, CHILDREN: null, $ref: '#/components/schemas/Vessel' } },\n// 'CS_v1.0.1' : { DEFAULT: { type: null, title: null, required: null, CHILDREN: null, $ref: '#/components/schemas/Vessel' } },\n PARENTS : { PortCall: {}, CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {} },\n DEFAULT : { $ref: '#/components/schemas/Vessel' },\n },\n Vessel: {\n 'JIT_v2.0.0' : { DEFAULT: { type: 'object', title: 'Vessel', CHILDREN: ['vesselIMONumber','MMSINumber','name','lengthOverall','width','dimensionUnit','callSign','typeCode'] } },\n 'BKG_v2.0.x' : { DEFAULT: { type: 'object', title: 'Vessel', required: ['name'], CHILDREN: ['name','vesselIMONumber'] } },\n// 'BKG_v2.0.1' : { DEFAULT: { type: 'object', title: 'Vessel', required: ['name'], CHILDREN: ['name','vesselIMONumber'] } },\n// 'BKG_v2.0.2' : { DEFAULT: { type: 'object', title: 'Vessel', required: ['name'], CHILDREN: ['name','vesselIMONumber'] } },\n DEFAULT : { type: 'object', title: 'Vessel', CHILDREN: ['vesselIMONumber','MMSINumber','name','flag','callSign','operatorCarrierCode','operatorCarrierCodeListProvider'] },\n },\n vesselCallSign: {\n 'OVS_v3.0.x' : { DEFAULT: { type: 'string', maxLength: 10, pattern: null }, PARENTs: { VesselSchedule: {} } },\n PARENTS : { VesselSchedule: {} },\n DEFAULT : { type: 'string', maxLength: 10, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n vesselCallSignNumber: {\n PARENTS : { VesselSchedule: {} },\n DEFAULT : { type: 'string', maxLength: 10 },\n },\n vesselIMONumber: {\n 'OVS_v3.0.x' : { DEFAULT: { type: 'string', minLength: null, maxLength: 7, pattern: '^\\\\d{7}$' }, PARENTs: { VesselSchedule: {} } },\n PARENTS : { TerminalTimestamp: {}, vessel: {}, Vessel: {}, Transport: {}, VesselVoyage: {}, Barge: {}, VesselSchedule: {}, departingVesselVoyage: {} },\n DEFAULT : { type: 'string', minLength: 7, maxLength: 8, pattern: '^\\\\d{7,8}$' },\n },\n vesselMMSINumber: {\n DEFAULT : { type: 'string', minLength: 9, maxLength: 9, pattern: '^\\\\d{9}$' },\n },\n vesselName: {\n 'OVS_v3.0.x' : { DEFAULT: { type: 'string', maxLength: 35, pattern: null, pseudoEnum: [] }, PARENTs: { VesselSchedule: {} } },\n PARENTS : { TerminalTimestamp: {}, Transport: {}, VesselVoyage: {}, VesselSchedule: {}, departingVesselVoyage: {} },\n DEFAULT : { type: 'string', maxLength: 50, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n vesselOperatorCarrierCode: {\n PARENTS : { vessel: {nullable: 'false'}, Schedule: {}, VesselSchedule: {} },\n DEFAULT : { type: 'string', maxLength: 10 },\n },\n vesselOperatorSMDGLinerCode: {\n DEFAULT : { type: 'string', maxLength: 10 },\n },\n vesselOperatorCarrierCodeListProvider: {\n PARENTS : { vessel: {nullable: 'false'}, Schedule: {}, VesselSchedule: {} },\n DEFAULT : { type: 'string', enum: ['SMDG', 'NMFTA'] },\n },\n vesselPosition: {\n DEFAULT : { $ref: '#/components/schemas/VesselPosition' },\n },\n VesselPosition: {\n DEFAULT : { type: 'object', title: 'Vessel Position', CHILDREN: ['locationName','facility','UNLocationCode', 'geoCoordinate'] },\n },\n VesselSchedule: {\n 'OVS_HUB_TER_v1.0.x' : { DEFAULT: { required: ['vesselOperatorSMDGLinerCode', 'transportCalls'], CHILDREN: ['vesselOperatorSMDGLinerCode','vesselIMONumber','MMSINumber','vesselName','vesselCallSign','transportCalls'] } },\n 'OVS_v3.0.x' : { DEFAULT: { type: 'object', title: 'Vessel Schedule', required: ['isDummyVessel', 'vesselOperatorSMDGLinerCode'], CHILDREN: ['vesselOperatorSMDGLinerCode','vesselIMONumber','MMSINumber','vesselName','vesselCallSign','isDummyVessel','transportCalls'] } },\n DEFAULT : { type: 'object', title: 'Vessel Schedule', required: ['isDummyVessel'], CHILDREN: ['vessel','isDummyVessel','transportCalls'] },\n },\n vesselSchedules: {\n 'OVS_v3.0.x' : { PARENTS: { ServiceSchedule: { minItems: null, items: {$ref: '#/components/schemas/VesselSchedule'} } } },\n PARENTS : { ServiceSchedule: { minItems: 1, items: {$ref: '#/components/schemas/VesselSchedule'} }, PortSchedule: { items: { $ref: '#/components/schemas/Schedule' } } },\n DEFAULT : { type: 'array' },\n },\n VesselStatus: {\n DEFAULT : {type: 'object', title: 'Vessel Status', required: ['portCallServiceID'], CHILDREN: ['portCallServiceID', 'draft','airDraft','aftDraft','forwardDraft','dimensionUnit','vesselPosition','milesToDestinationPort','isFYI']}\n },\n VesselStatuses: {\n DEFAULT : { type: 'array', items: { $ref: '#/components/schemas/VesselStatus' } },\n },\n VesselTransport: {\n DEFAULT : { type: 'object', title: 'Vessel Transport', required: ['modeOfTransport'], CHILDREN: ['modeOfTransport','portVisitReference','transportCallReference','servicePartners','universalServiceReference','universalExportVoyageReference','universalImportVoyageReference','vessel'] },\n },\n VesselVoyage: {\n DEFAULT : { type: 'object', title: 'Vessel/Voyage', required: ['vesselName', 'carrierExportVoyageNumber'], CHILDREN: ['vesselName','carrierExportVoyageNumber','universalExportVoyageReference','role'] },\n },\n vesselVoyages: {\n DEFAULT : { type: 'array', minItems: 1, items: {$ref: '#/components/schemas/VesselVoyage'} },\n },\n weightUnit: {\n PARENTS : { Equipment: {}, RequiredEquipment: {} },\n DEFAULT : { type: 'string', enum: ['KGM', 'LBR'] },\n },\n width: {\n PARENTS : { Vessel: {} },\n DEFAULT : { type: 'number', format: 'float' }, // JIT\n },\n woodDeclaration: {\n PARENTS : { OuterPackaging: {}, OuterPackagingShipper: {} },\n DEFAULT : { type: 'string', maxLength: 30, pseudoEnum: ['NOT_APPLICABLE','NOT_TREATED_AND_NOT_CERTIFIED','PROCESSED','TREATED_AND_CERTIFIED'] },\n },\n};\n\n\n// Makes sure two arrays are equal if:\n// * they are the same array\n// * they have the same size\n// * items on each position in the list are the same\nfunction arraysEqual(a, b) {\n if (a === b) return true;\n if (a == null || b == null) return false;\n if (a.length !== b.length) return false;\n\n for (let i = 0; i < a.length; ++i) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n}\n\n// input: the property (Node) in the API to validate\n// propertyName: the name of the property being tested (can be a simpleType or an object)\n// attribute: the attribute to test (type, minLength, required, etc...) if specified correctly\n// requirements: the list of attributes that from the Spectral rule that is valid\n// results: an accumulated list of errors for a particular property\nfunction checkRequirement(input, propertyName, attribute, requirements, results) {\n // Checking 'enum' attribute\n if (attribute === 'enum') {\n // Check that enum values match (= are specified the same way...)\n const enumValuesRequired = requirements[attribute];\n const enumValues = input[attribute];\n if (!arraysEqual(enumValues, enumValuesRequired)) {\n // The two enum lists do not match - file an error\n results.push( { message: propertyName + `.` + attribute + ` value must equal: [` + enumValuesRequired + `], value provided: [` + enumValues + `]`, }, );\n }\n // Checking 'required' attribute\n } else if (attribute === 'required') {\n // Check that required lists match (= are specified the same way...)\n const requiredValues = requirements[attribute];\n const inputValues = input[attribute];\n if (!arraysEqual(inputValues, requiredValues)) {\n // The two required lists do not match - file an error\n results.push( { message: propertyName + `.` + attribute + ` value must equal: [` + requiredValues + `], value provided: [` + inputValues + `]`, }, );\n }\n\n // Check that required attributes are part of the Schema (if schema is updated without the required list being updated)\n if (requiredValues && requiredValues.length > 0) {\n if (!input.properties) {\n results.push( { message: propertyName + ` has required child-properties defined...`, }, );\n } else {\n for (let i = 0; i < requiredValues.length; ++i) {\n if (!input.properties[requiredValues[i]]) {\n results.push( { message: propertyName + ` HAS required property ` + requiredValues[i] + ` but it is missing as a child in the schema`, }, );\n }\n }\n }\n }\n // Checking 'items' attribute\n } else if (attribute === 'items') {\n if (input['items'] && requirements['items']) {\n // Check if a $ref MUST be used\n if (Object.keys(input['items']).length === 1 && input['items']['$ref']) {\n // the input contains a $ref\n if (requirements['items']['$ref'] !== input['items']['$ref']) {\n results.push( { message: propertyName + `.` + attribute + ` is defined as a $ref pointing to '` + input['items']['$ref'] + `' - but must be defined ` + (requirements['items']['$ref'] ? `as a $ref pointing to: ` + requirements['items']['$ref'] : `inline`), }, );\n }\n } else if (Object.keys(requirements['items']).length === 1 && requirements['items']['$ref']) {\n // the spec requires a $ref\n if (input['items']['$ref'] !== requirements['items']['$ref']) {\n results.push( { message: propertyName + `.` + attribute + ` is not defined as a $ref and MUST point to: ` + requirements['items']['$ref'], }, );\n }\n } else {\n // Multiple properties defined for an inline defined items\n for (const attribute2 of ATTRIBUTES_TO_CHECK) {\n checkRequirement(input.items, propertyName + '.items', attribute2, requirements.items, results)\n }\n\n // Check Enums and Pseudo-Enums\n checkEnumAndPseudoEnum(input.items, propertyName + '.items', requirements.items, results);\n\n }\n } else {\n if (input['items']) {\n // input.items is defined - but it is not part of the required properties\n results.push( { message: propertyName + `.` + attribute + ` value defined but shouldn't be according to the rules`, }, );\n } else if (requirements['items']) {\n // requirements.items is defined - but it is not part of the input properties\n results.push( { message: propertyName + `.` + attribute + ` value is missing - MUST be defined`, }, );\n }\n }\n } else if ((typeof input[attribute]) === 'boolean' || (typeof input[attribute]) === 'number') {\n // NOTE: It is IMPORTANT to convert to string before comparison otherwise boolean comparison will validate wrong\n if (String(requirements[attribute]) !== String(input[attribute])) {\n // The value provided and the value required does not match - file an error\n results.push( { message: propertyName + `.` + attribute + ` value must equal: ` + requirements[attribute] + `, value provided: ` + input[attribute], }, );\n }\n\n // Checking a specific attribute\n } else if (requirements[attribute] !== input[attribute]) {\n // The below line was wrongly included - it results in 2 errors in case e.g. Title from spec does not match the accepted value\n // results.push( { message: propertyName + `.` + attribute + ` TYPEOF INPUT VALUE IS: ` + (typeof input[attribute]), }, );\n\n // The value provided and the value required does not match - file an error\n results.push( { message: propertyName + `.` + attribute + ` value must equal: ` + requirements[attribute] + `, value provided: ` + input[attribute], }, );\n }\n\n // Make sure type attributes that are strings have example attribute value set\n if (attribute === 'type' && requirements[attribute] === \"string\") {\n if (!input['example'] || input['example'].length === 0){\n // Example value missing when type=string - file an error\n results.push( { message: propertyName + `.example attribute must be set with a value`, }, );\n } else if (input['format'] && input['format'] === 'date') {\n // Make sure the example contains an offset or is defined as UTC\n if (input['example'].match(/^.+((Z)|([\\+\\-])(\\d\\d):(\\d\\d))$/)) {\n results.push( { message: propertyName + `.example must not contain an offset or be a UTC date when format=date`, }, );\n }\n } else if (input['format'] && input['format'] === 'date-time') {\n // Make sure the example contains an offset or is defined as UTC\n if (!input['example'].match(/^.+((Z)|([\\+\\-])(\\d\\d):(\\d\\d))$/)) {\n results.push( { message: propertyName + `.example must contain an offset or be UTC if format=date-time`, }, );\n }\n } \n }\n}\n\n// Check two lists against each other and list the differences (disregarding order if items)\n// propertyName: the name of the property being tested (can be a simpleType or an object)\n// text: the text to test against (most likely the description field)\n// list: the list of items to check from the Spec\n// isEnum: used for presentation purposes - indicates if it is an enum or a pseudoEnum\n// results: an accumulated list of errors for a particular property\nfunction checkLists(propertyName, text, list, isEnum, results) {\n let match;\n const fullMatches = [];\n const matches = [];\n // Use a loop to find all matches\n\n // IMPORTANT: reset lastIndex because PSEUDO_ENUM_PATTERN is global (/g)\n PSEUDO_ENUM_PATTERN.lastIndex = 0;\n\n while ((match = PSEUDO_ENUM_PATTERN.exec(text)) !== null) {\n fullMatches.push(match[0]);\n matches.push(match[1]); // Add the first capturing group to the list\n if (false && 'transportDocumentStatus' === propertyName) {\n results.push( { message: propertyName + `.description FULL MATCHES ` + match[0], }, );\n results.push( { message: propertyName + `.description exact MATCHES ` + match[1], }, );\n }\n }\n\n var output = [];\n var formatList = [];\n outer:\n for (let k = 0; k < list.length; ++k) {\n for (let j = 0; j < matches.length; ++j) {\n if (matches[j] === list[k]) {\n if (!fullMatches[j].includes('- `' + list[k] + '`')) {\n formatList.push(list[k]);\n }\n fullMatches.splice(j, 1);\n matches.splice(j, 1);\n continue outer;\n }\n }\n output.push(list[k]);\n }\n\n if (output.length > 0) {\n results.push( { message: propertyName + `.description does not mention ` + (isEnum ? `Enum` : `PseudoEnum`) + ` value(s): [` + output + `]`, }, );\n }\n\n if (matches.length > 0) {\n if (isEnum) {\n results.push( { message: propertyName + `.description contains descriptions for the following Enum-values but they are missing in the Enum list: [` + matches + `]`, }, );\n } else {\n results.push( { message: propertyName + `.description contains descriptions for the following PseudoEnum-values but they are missing in the pseudoEnum-Spec list: [` + matches + `]`, }, );\n }\n }\n\n if (formatList.length > 0) {\n results.push( { message: propertyName + `.description does not follow the agreed pattern for presenting ` + (isEnum ? `an Enum` : `a PseudoEnum`) + `: [` + formatList + `]\\nShould follow the pattern: - \\`...\\` (...)`, }, );\n }\n}\n\nfunction checkEnumAndPseudoEnum(input, propertyName, spec, results) {\n // - Only check for String types\n if ((spec && spec.type && spec.type === 'string' && !spec.format) || (!(spec && spec.type) && input && input.type && input.type === 'string')) {\n if (spec && spec.pseudoEnum) {\n if (spec.pseudoEnum.length === 0) {\n // The description of the property contains PseudoEnum like text but is not a PseudoEnum\n // ** This allows a property description to match PsudeoEnum without being treated as one **\n } else {\n // The spec contains a pseudoEnum pattern that needs to be checked\n if (input && input.description) {\n const matches = input.description.match(PSEUDO_ENUM_PATTERN) || [];\n\n // This property contains PseudoEnum values - make sure they are all present in the description\n checkLists(propertyName, input.description, spec.pseudoEnum, false, results);\n }\n }\n } else {\n // Test the description for Enum or PseudoEnum values-descriptions\n if (input && input.description) {\n if (input.enum) {\n // Test if Enum values are mentioned in the description\n \n checkLists(propertyName, input.description, input.enum, true, results);\n } else {\n // Make sure no PseudoEnum are present in the description\n PSEUDO_ENUM_PATTERN.lastIndex = 0;\n if (PSEUDO_ENUM_PATTERN.test(input.description)) {\n results.push( { message: propertyName + `.description contains a 'PseudoEnum'-pattern but the property is not defined as one.\\nIf this is not a PseudoEnum then the spec must contain 'pseudoEnum: []'`, }, );\n }\n }\n }\n }\n }\n}\n\n// spec: the accumulated spec to validate against in all uses of a property\n// propertyName: the name of the property being tested (can be a simpleType or an object)\n// input: the property (Node) in the API to validate\n// results: an accumulated list of errors for a particular property\nfunction checkAttributeRequirements(spec, propertyName, input, results) {\n // Test valid $ref specifications\n if (input && Object.keys(input).length === 1 && input['$ref']) {\n // Make sure correct use of $ref is used\n if (spec && spec['$ref']) {\n if (spec['$ref'] !== input['$ref']) {\n results.push({ message: propertyName + ` - if not defined inline it MUST use a $ref pointing to: ` + spec['$ref'] + ` (currently pointing to: ` + input['$ref'] +`)`, }, );\n }\n } else {\n // The attribute exists only in the API - NOT as a Spectral rule - file an error\n results.push( { message: propertyName + `.$ref is specified - but should be removed as it is not a required attribute`, }, );\n }\n // Don't validate anything else - if specified using a $ref - it must match and nothing else\n return;\n }\n\n // Check Enums and Pseudo-Enums\n checkEnumAndPseudoEnum(input, propertyName, spec, results);\n\n // Run through all properties to check\n for (const attribute of ATTRIBUTES_TO_CHECK) {\n\n // For debugging!!!!\n if (false && (attribute === 'minItems' && propertyName === 'identifyingCodes')) {\n if (input) {\n if ((attribute in input)) {\n results.push( { message: propertyName + `.` + attribute + ` is specified in INPUT and has value:` + input[attribute], }, );\n } else {\n results.push( { message: propertyName + `.` + attribute + ` is NOT specified in INPUT`, }, );\n }\n }\n if (spec) {\n if ((attribute in spec)) {\n results.push( { message: propertyName + `.` + attribute + ` is specified in SPEC and has value:` + spec[attribute], }, );\n results.push( { message: propertyName + `.` + attribute + ` SPEC =` + spec[attribute] + `, typeOf=` + (typeof spec[attribute]), }, );\n results.push( { message: propertyName + `.` + attribute + ` INPUT =` + input[attribute] + `, typeOf=` + (typeof input[attribute]), }, );\n if (String(spec[attribute]) !== String(input[attribute])) {\n results.push( { message: propertyName + `.` + attribute + `: SPEC and INPUT are NOT alligned`, }, );\n } else {\n results.push( { message: propertyName + `.` + attribute + `: SPEC and INPUT are alligned`, }, );\n }\n } else {\n results.push( { message: propertyName + `.` + attribute + ` is NOT specified in SPEC`, }, );\n }\n }\n }\n\n // Check if the property is used in the API\n if (input && (attribute in input)) {\n // ...and check if it also exists in the spec\n if (spec && (attribute in spec)) {\n checkRequirement(input, propertyName, attribute, spec, results);\n } else {\n // The attribute exists only in the API - NOT in the spec - file an error\n results.push( { message: propertyName + `.` + attribute + ` is specified - but should be removed as it is not a required attribute`, }, );\n }\n } else if (spec && (attribute in spec) && (spec[attribute] !== undefined)) {\n // The attribute exists in the spec - NOT in the API (if the attribute is specified as \"Null\" or \"Undefined\" then it is treated just like if it was not specified - this is how you \"overrule\" a specified value)\n if (attribute === 'enum' || attribute === 'required') {\n // Provide better error message for missing enum\n results.push( { message: propertyName + `.` + attribute + ` must contain the list: [` + spec[attribute] + `] but nothing was provided`, }, );\n } else {\n results.push( { message: propertyName + `.` + attribute + ` value must equal: ` + spec[attribute] + ` but nothing was provided`, }, );\n }\n } else {\n // In none of the lists - there is no requirement for this attribute\n }\n }\n\n //Check descriptions\n if (input && input['type'] && input['type'] === 'string' && input['description']) {\n if (input.format && (input.format === 'date' || input.format === 'date-time') && input['description'].match(/iso *8601/i)) {\n results.push( { message: propertyName + `.description contains an invalid reference to ISO 8601 - please remove`, }, );\n }\n } else if (input['type'] && input['type'] !== 'array' && !input['description']) {\n // File an error if no description has been written\n results.push( { message: propertyName + `.description is missing....`, }, );\n }\n\n // Check that children are specified correctly\n if (input && input['type'] && input['type'] === 'object' && spec['CHILDREN']) {\n// if (input.properties && !arraysEqual(Object.keys(input.properties), spec['CHILDREN'])) {\n if (input.properties && !arraysEqual(Array.from(Object.keys(input.properties)), spec['CHILDREN'])) {\n // The two enum lists do not match - file an error\n results.push( { message: propertyName + ` MUST have the following children: [` + spec['CHILDREN'] + `], value provided: [` + Object.keys(input.properties) + `]`, }, );\n }\n // results.push( { message: propertyName + ` looking for children: ` + JSON.stringify(Object.keys(input.properties)) + spec['CHILDREN'], }, );\n }\n}\n\n// specA: the accumulated spec for the property\n// specB: the spec to merge into the accumulated spec. Null removes a property, otherwise it will be added or updated\n// includeParentProperty: weather to use this method to also copy the PARENTS property\nfunction mergeSpecs(specA, specB, includeParentProperty) {\n // Make sure specB exists\n if (specB) {\n // Run through all elements in specB\n for (const [key, value] of Object.entries(specB)) {\n // If value of key in specB is null\n if (!value) {\n // ...and it exists in specA\n specA[key] = undefined;\n// if (specA[key]) {\n// // ...then delete the key in specA!\n// //delete specA[key];\n// }\n // If the key already exists in specA\n } else if (includeParentProperty || key !== 'PARENTS') {\n // ...then update or add the value in specA\n specA[key] = value;\n }\n }\n }\n}\n\n// spec: the spec as defined for the current location\n// parentSpec: the spec as defined for the specific parent node\n// context: a StopLight object containing metadata about the API property being tested\n// index: the parent index of the context.path currently being checked\n// results: an accumulated list of errors for a particular property\n// returns true if location is matched - false if the property is not allowed\nfunction checkParent(spec, parentSpec, context, index, results) {\n // Check if parentSpec is defined\n if (parentSpec) {\n // Find the index of the parentName\n const newIndex = ((context.path.length > (3 + index)) && (context.path[context.path.length - (3 + index)] === 'items')) ?\n (4 + index) : (3 + index);\n // Get the parentName\n const parentPropertyName = context.path[context.path.length - newIndex];\n // Check if the parent spec has defined something for the parentName\n if (parentSpec[parentPropertyName]) {\n // ...if so - merge the spec of the parentSpec with the accumulated spec (excluding PARENTS property)\n mergeSpecs(spec, parentSpec[parentPropertyName], false);\n // ...and recursively check next parent\n return checkParent(spec, parentSpec[parentPropertyName]['PARENTS'], context, newIndex, results);\n } else {\n // Check if we are in a oneOf situation\n if (/^[0-9]+$/.test(parentPropertyName) && (context.path.length > (newIndex + 2)) && parentSpec[context.path[context.path.length - (newIndex + 2)]]) {\n mergeSpecs(spec, parentSpec[context.path[context.path.length - (newIndex + 2)]], false);\n return checkParent(spec, parentSpec[context.path[context.path.length - (newIndex + 2)]]['PARENTS'], context, newIndex + 2, results);\n } else {\n // If the parentName does not exist in the parentSpec - then the property is not allowed in that particular position\n results.push( { message: context.path[context.path.length - 1] + ` is only allowed under one of these parents: [` + Object.keys(parentSpec) + `] - was found under: ` + parentPropertyName, }, );\n return false;\n }\n }\n } else {\n return true;\n }\n}\n\n// property: the Spectral spec to validate against\n// standard: the name of the OAS file (without \".yaml\"-extension)\n// propertyName: the name of the property being tested (can be a simpleType or an object)\n// input: the property (Node) in the API to validate\n// context: a StopLight object containing metadata about the API property being tested\n// specs: the specs to test against\n//\nfunction checkStandard(property, standard, propertyName, input, context, specs, results) {\n // Gather all errors in results\n// const results = [];\n\n// let specs = {};\n if (property['DEFAULT'] && property['DEFAULT'].basedOn) {\n const basedOnPropertyName = property['DEFAULT'].basedOn;\n checkStandard(DCSA_PROPERTIES[basedOnPropertyName], standard, basedOnPropertyName, input, context, specs, results);\n }\n mergeSpecs(specs, property['DEFAULT'], false);\n\n // Merge with standard specific specs (if any)\n var standardProperty = property[standard];\n if (standardProperty) {\n mergeSpecs(specs, standardProperty['DEFAULT'], false);\n } else {\n // Check if there is a MINOR default (a 'yyy.x API spec which covers multiple APIs)\n standardProperty = property[standard.replace(/(\\d+\\.\\d+)\\.\\d+$/, '$1.x')];\n if (standardProperty) {\n mergeSpecs(specs, standardProperty['DEFAULT'], false);\n }\n }\n\n // Check if parent requirements should be checked\n if (!NO_PARENT_CHECK.has(standard)) {\n let parentSpecs = {};\n if (standardProperty) {\n // Use the PARENTS from the standard\n mergeSpecs(parentSpecs, standardProperty['PARENTS'], true);\n// if (propertyName === 'documentParties') {\n// results.push( { message: `**** parentSpecs: [` + Object.keys(parentSpecs) + `]`, }, );\n// }\n } else {\n // Use the PARENTS from the default\n mergeSpecs(parentSpecs, property['PARENTS'], true);\n }\n\n // Only merge a possible parent requirement if one has been defined\n if (!isEmptyObject(parentSpecs)) {\n let resultingParentSpecs = {};\n if (!IGNORE_PARENT_CHECK.has(standard)) {\n if (checkParent(resultingParentSpecs, parentSpecs, context, 0, results)) {\n mergeSpecs(specs, resultingParentSpecs)\n }\n }\n }\n }\n}\n\nfunction isEmpty(obj) {\n for (const prop in obj) {\n if (Object.hasOwn(obj, prop)) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction isEmptyObject(value) {\n if (value == null) {\n // null or undefined\n return false;\n }\n\n if (typeof value !== 'object') {\n // boolean, number, string, function, etc.\n return false;\n }\n\n const proto = Object.getPrototypeOf(value);\n\n // consider `Object.create(null)`, commonly used as a safe map\n // before `Map` support, an empty object as well as `{}`\n if (proto !== null && proto !== Object.prototype) {\n return false;\n }\n\n return isEmpty(value);\n}\n\nexport default createRulesetFunction(\n {\n input: null,\n options: null,\n },\n function checkRequirements(input, options, context) {\n // Get propertyName to check based on the path in the Context\n const propertyName = context.path[context.path.length - 1];\n\n // Get the Standard being tested (this excludes the '.yaml' e.g.: BKG_v2.0.2)\n const standard = context['document']['source'].substring(context['document']['source'].lastIndexOf('/') + 1, context['document']['source'].length - 5);\n\n // Check if the standard is in the list of standards that is currently covered by Spectral\n if (COVERED_STANDARDS.has(standard)) {\n // Get the property in the list of DCSA_PROPERTIES\n const property = DCSA_PROPERTIES[propertyName];\n if (property) {\n // Gather all errors in results\n const results = [];\n // Gather the specs to check against\n let specs = {};\n checkStandard(property, standard, propertyName, input, context, specs, results);\n //results.push( { message: propertyName + ` specs: [` + Object.keys(specs) + `]`, }, );\n\n // Specs is now correct in regard to specification and location\n checkAttributeRequirements(specs, propertyName, input, results);\n\n // Only return a list if it contains something - StopLight requirement!!\n if (results.length > 0) {\n return results;\n }\n } else {\n // the property name not part of DCSA_PROPERTIES\n if (!IGNORE_UNSUPPORTED_PROPERTIES.has(standard)) {\n // if (ERROR_ON_UNSUPPORTED_PROPERTIES) {\n return [ { message: propertyName + ` is not in the list of DCSA supported property names`, }, ];\n }\n }\n }\n }\n);" + "content": "import { createRulesetFunction } from '@stoplight/spectral-core';\n\n// Should Spectral return an error if unsupported properties are found\nconst IGNORE_UNSUPPORTED_PROPERTIES = new Set([\n 'OVS_HUB_TER_v1.0.0',\n 'OVS_HUB_REF_v1.0.0',\n 'OVS_HUB_NTF_v1.0.0',\n]);\n\n// Should Spectral return an error if wrong parent element is found\nconst IGNORE_PARENT_CHECK = new Set([\n 'OVS_HUB_TER_v1.0.0',\n 'OVS_HUB_REF_v1.0.0',\n 'OVS_HUB_NTF_v1.0.0',\n]);\n\n// Pattern used to find PseudoEnums and enums in descriptions\nconst PSEUDO_ENUM_PATTERN = /\\n *- *`?([A-Z0-9_.]+)`? *(\\(|:)?/g;\n\n// Should Spectral ignore checks regarding \"location\" of the property\n// (parent specific specifications (also if defined in a standard) are ignored)\nconst NO_PARENT_CHECK = new Set([\n //'CS_v1.0.0',\n]);\n\n// List of eBL Platform Solution Providers\nconst EBL_PLATFORM_SOLUTION_PROVIDERS = ['WAVE','CARX','ESSD','IDT','BOLE','EDOX','IQAX','SECR','TRGO','ETEU','TRAC','BRIT','COVA','ETIT','KTNE','CRED','BLOC','DOCU','AEOT','SGTD'];\n\n// List of attributes to be checked\n// For all attributes in ATTRIBUTES_TO_CHECK, this Spectral rule will make sure:\n// * if attribute is in the Spec - the attribute MUST also be in the requirements\n// * if attribute is in the requirements - then it also need to be in the Spec\nconst ATTRIBUTES_TO_CHECK= ['type', 'minLength', 'maxLength', 'pattern', 'enum', 'format', 'deprecated', 'exclusiveMaximum',\n 'exclusiveMinimum', 'maximum', 'minimum', 'minItems', 'maxItems', 'required', 'nullable', 'items', 'title', 'additionalProperties', 'default', 'readOnly', 'writeOnly'];\n\n// List of Objects that must follow the CloudEvent Notification pattern\nconst DCSA_CLOUDEVENT_GROUP = { ShippingInstructionsNotification: {}, TransportDocumentNotification: {}, BookingNotification: {}, ArrivalNoticeNotification: {} };\n\n// Spectral will **ONLY** check the standards in this list (in the future all APIs should be covered).\nconst COVERED_STANDARDS = new Set([\n // Arrival Notice\n // 'AN_v1.0.0-Beta-1',\n // Booking\n 'BKG_v2.0.0',\n 'BKG_v2.0.1',\n 'BKG_v2.0.2',\n 'BKG_v2.0.3',\n 'BKG_v2.0.4',\n 'BKG_v2.0.5',\n // Commercial Schedules\n 'CS_v1.0.0',\n 'CS_v1.0.1',\n 'CS_v1.0.2',\n 'CS_v1.0.3',\n // electronic Bill of Lading\n 'EBL_v3.0.0',\n 'EBL_v3.0.1',\n 'EBL_v3.0.2',\n 'EBL_v3.0.3',\n 'EBL_v3.0.4',\n 'EBL_END_v3.0.2',\n 'EBL_END_v3.0.3',\n 'EBL_END_v3.0.4',\n 'EBL_ISS_v3.0.0',\n 'EBL_ISS_v3.0.1',\n 'EBL_ISS_v3.0.2',\n 'EBL_ISS_v3.0.3',\n 'EBL_ISS_v3.0.4',\n 'EBL_SUR_v3.0.0',\n 'EBL_SUR_v3.0.1',\n 'EBL_SUR_v3.0.2',\n 'EBL_SUR_v3.0.3',\n 'EBL_SUR_v3.0.4',\n 'EBL_PINT_v3.0.0',\n // Just in Time Port Calls\n 'JIT_v2.0.0',\n 'OVS_v3.0.0',\n 'OVS_v3.0.1',\n 'OVS_v3.0.2',\n 'OVS_HUB_TER_v1.0.0',\n 'OVS_HUB_REF_v1.0.0',\n 'OVS_HUB_NTF_v1.0.0',\n]);\n\n// A list of accepted properties that have changed over time or are different for different standards\n// DEFAULT covers all remaining standards\n// \"GROUPS\" - e.g. EBL_BETA2_GROUP: this covers all standards in the EBL Beta 2 release (EBL, ISS, ISS_RSP, SUR, SUR_RSP, EBL_NFT, PINT)\n// - it is possible to define more groups in which the group need to be added next to where EBL_BETA2_GROUP is used\n// If 'parent' is specified - then the spec only allows the property under the list of parents\n// If no 'parent' is specified - the spec applies to all locations in the document\n// parents-specs overrule \"globalSpec\"\n// Enum and required fields (fields specified as lists) MUST be defined in same order\nconst DCSA_PROPERTIES = {\n _20_units: {\n DEFAULT : { type: 'integer', format: 'int32', minimum: '0' }\n },\n _40_units: {\n DEFAULT : { type: 'integer', format: 'int32', minimum: '0' }\n },\n _45_units: {\n DEFAULT : { type: 'integer', format: 'int32', minimum: '0' }\n },\n action: {\n PARENTS : { SurrenderRequestAnswer: {} },\n DEFAULT : { type: 'string', enum: ['SURR', 'SREJ'] },\n },\n actionCode: {\n PARENTS : { EndorsementChainLink: {}, Transaction: { pseudoEnum: ['ISSUE','ENDORSE','SIGN','SURRENDER_FOR_DELIVERY','SURRENDER_FOR_AMENDMENT','SACC','SREJ','BLANK_ENDORSE','ENDORSE_TO_ORDER','TRANSFER'] } },\n DEFAULT : { type: 'string', maxLength: 50, pseudoEnum: ['ISSUE','ENDORSE','SIGN','SURRENDER_FOR_DELIVERY','SURRENDER_FOR_AMENDMENT','BLANK_ENDORSE','ENDORSE_TO_ORDER','TRANSFER','SURRENDERED'] },\n },\n actionDateTime: {\n PARENTS : { EndorsementChainLink: {}, Transaction: {} },\n DEFAULT : { type: 'string', format: 'date-time' },\n },\n ActiveReeferSettings: {\n 'BKG_v2.0.x' : { DEFAULT: { required: ['temperatureSetpoint', 'temperatureUnit'], CHILDREN: ['temperatureSetpoint', 'temperatureUnit', 'o2Setpoint', 'co2Setpoint', 'humiditySetpoint', 'airExchangeSetpoint', 'airExchangeUnit', 'isVentilationOpen', 'isDrainholesOpen', 'isBulbMode', 'isColdTreatmentRequired', 'isControlledAtmosphereRequired', 'isPreCoolingRequired', 'isGeneratorSetRequired'] }, },\n// 'BKG_v2.0.1' : { DEFAULT: { required: ['temperatureSetpoint', 'temperatureUnit'], CHILDREN: ['temperatureSetpoint', 'temperatureUnit', 'o2Setpoint', 'co2Setpoint', 'humiditySetpoint', 'airExchangeSetpoint', 'airExchangeUnit', 'isVentilationOpen', 'isDrainholesOpen', 'isBulbMode', 'isColdTreatmentRequired', 'isControlledAtmosphereRequired', 'isPreCoolingRequired', 'isGeneratorSetRequired'] }, },\n// 'BKG_v2.0.2' : { DEFAULT: { required: ['temperatureSetpoint', 'temperatureUnit'], CHILDREN: ['temperatureSetpoint', 'temperatureUnit', 'o2Setpoint', 'co2Setpoint', 'humiditySetpoint', 'airExchangeSetpoint', 'airExchangeUnit', 'isVentilationOpen', 'isDrainholesOpen', 'isBulbMode', 'isColdTreatmentRequired', 'isControlledAtmosphereRequired', 'isPreCoolingRequired', 'isGeneratorSetRequired'] }, },\n// 'BKG_v2.0.3' : { DEFAULT: { required: ['temperatureSetpoint', 'temperatureUnit'], CHILDREN: ['temperatureSetpoint', 'temperatureUnit', 'o2Setpoint', 'co2Setpoint', 'humiditySetpoint', 'airExchangeSetpoint', 'airExchangeUnit', 'isVentilationOpen', 'isDrainholesOpen', 'isBulbMode', 'isColdTreatmentRequired', 'isControlledAtmosphereRequired', 'isPreCoolingRequired', 'isGeneratorSetRequired'] }, },\n DEFAULT : { type: 'object', title: 'Active Reefer Settings', CHILDREN: ['temperatureSetpoint', 'temperatureUnit', 'o2Setpoint', 'co2Setpoint', 'humiditySetpoint', 'airExchangeSetpoint', 'airExchangeUnit', 'isVentilationOpen', 'isDrainholesOpen', 'isBulbMode', 'isColdTreatmentRequired', 'isControlledAtmosphereRequired'] },\n },\n activeReeferSettings: {\n PARENTS : { RequestedEquipment: {}, RequestedEquipmentShipper: {}, UtilizedTransportEquipmentCarrier: {}, UtilizedTransportEquipment: {} },\n DEFAULT : { $ref: '#/components/schemas/ActiveReeferSettings' },\n },\n actor: {\n PARENTS : { EndorsementChainLink: {}, Transaction: {} },\n DEFAULT : { $ref: '#/components/schemas/ActorParty' },\n },\n actualDateTime: {\n DEFAULT : { type: 'string', format: 'date-time'}\n },\n additionalContainerCargoHandling: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { type: 'string', maxLength: 255 },\n },\n address: {\n 'OVS_v3.0.x' : { PARENTS: { AddressLocation: { type: 'object', required: ['name'] } } },\n PARENTS : {\n Location: {$ref: '#/components/schemas/Address'},\n LoadLocation: {$ref: '#/components/schemas/Address'},\n DischargeLocation: {$ref: '#/components/schemas/Address'},\n PlaceOfReceipt: {$ref: '#/components/schemas/Address'},\n PortOfLoading: {$ref: '#/components/schemas/Address'},\n PortOfDischarge: {$ref: '#/components/schemas/Address'},\n PlaceOfDelivery: {$ref: '#/components/schemas/Address'},\n OnwardInlandRouting: {$ref: '#/components/schemas/Address'},\n BookingAgent: {$ref: '#/components/schemas/PartyAddress'},\n Shipper: {$ref: '#/components/schemas/PartyAddress'},\n ShipperShipper: {$ref: '#/components/schemas/PartyAddress'},\n OnBehalfOfShipper: {$ref: '#/components/schemas/PartyAddress'},\n OnBehalfOfShipperShipper: {$ref: '#/components/schemas/PartyAddress'},\n ShipperHBL: {$ref: '#/components/schemas/Address'},\n Consignee: {$ref: '#/components/schemas/PartyAddress'},\n OnBehalfOfConsignee: {$ref: '#/components/schemas/PartyAddress'},\n OnBehalfOfConsigneeShipper: {$ref: '#/components/schemas/PartyAddress'},\n ConsigneeShipper: {$ref: '#/components/schemas/PartyAddress'},\n ConsigneeHBL: {$ref: '#/components/schemas/Address'},\n Endorsee: {$ref: '#/components/schemas/PartyAddress'},\n EndorseeShipper: {$ref: '#/components/schemas/PartyAddress'},\n ServiceContractOwner: {$ref: '#/components/schemas/PartyAddress'},\n CarrierBookingOffice: {$ref: '#/components/schemas/Address'},\n NotifyParty: { $ref: '#/components/schemas/PartyAddress'},\n NotifyPartyShipper: { $ref: '#/components/schemas/PartyAddress'},\n NotifyPartyHBL: { $ref: '#/components/schemas/AddressHBL'},\n Seller: { $ref: '#/components/schemas/Address'},\n SellerHBL: { $ref: '#/components/schemas/AddressHBL'},\n Buyer: { $ref: '#/components/schemas/Address'},\n BuyerHBL: { $ref: '#/components/schemas/AddressHBL'},\n ShippingInstructionsRequestor: { $ref: '#/components/schemas/PartyAddress' },\n Party: {$ref: '#/components/schemas/PartyAddress'},\n PartyShipper: {$ref: '#/components/schemas/PartyAddress'},\n PartyHBL: {$ref: '#/components/schemas/Address'},\n CarriersAgentAtDestination: {$ref: '#/components/schemas/Address'},\n IssuingParty: {$ref: '#/components/schemas/PartyAddress'},\n EmptyContainerDepotReleaseLocation: {$ref: '#/components/schemas/Address'},\n ContainerPositioningLocation: {$ref: '#/components/schemas/Address'},\n TransportCallLocation: { $ref: '#/components/schemas/Address' }\n },\n },\n Address: {\n 'CS_v1.0.x' : { DEFAULT: { type: 'object', title: 'Address', required: ['street', 'city', 'countryCode'], CHILDREN: ['street', 'streetNumber', 'floor', 'postCode', 'city', 'stateRegion', 'countryCode'] } },\n DEFAULT : { type: 'object', title: 'Address', required: ['street', 'city', 'countryCode'], CHILDREN: ['street', 'streetNumber', 'floor', 'postCode', 'POBox', 'city', 'stateRegion', 'countryCode'] },\n },\n AddressHBL: {\n DEFAULT : { type: 'object', title: 'Address (House B/L)', required: ['street', 'city', 'countryCode'], CHILDREN: ['street', 'streetNumber', 'floor', 'postCode', 'POBox', 'city', 'stateRegion', 'countryCode'] },\n },\n addressLines: {\n DEFAULT : { type: 'array', maxItems: 5, items: { type: 'string', maxLength: 250 } },\n },\n AddressLocation: {\n 'OVS_v3.0.x' : { DEFAULT: { type: 'object', title: 'Address Location', required: ['address','locationType'], CHILDREN: ['locationName', 'locationType', 'address'] } },\n },\n advanceManifestFilings: {\n PARENTS : { CreateShippingInstructions: {}, UpdateShippingInstructions: {}, ShippingInstructions: {}, updatedShippingInstructions: {}, shippingInstructions: {}, Booking: {}, booking: {}, amendedBooking: {} },\n DEFAULT : { type: 'array', items: {$ref: '#/components/schemas/AdvanceManifestFiling'} },\n },\n AdvanceManifestFiling: {\n 'BKG_v2.0.x' : { DEFAULT: { required: ['manifestTypeCode'], CHILDREN: ['manifestTypeCode','countryCode'] } },\n DEFAULT : { type: 'object', title: 'Advance Manifest Filing', required: ['manifestTypeCode', 'advanceManifestFilingsHouseBLPerformedBy'], CHILDREN: ['manifestTypeCode','countryCode','advanceManifestFilingsHouseBLPerformedBy','selfFilerCode','identificationNumber'] },\n },\n advanceManifestFilingsHouseBLPerformedBy: {\n PARENTS : { AdvanceManifestFiling: {} },\n DEFAULT : { type: 'string', enum: ['SELF', 'CARRIER'] },\n },\n aftDraft: {\n DEFAULT : { type: 'number', format: 'float' },\n },\n airDraft: {\n DEFAULT : { type: 'number', format: 'float' },\n },\n airExchangeSetpoint: {\n PARENTS : { ActiveReeferSettings: {} },\n DEFAULT : { type: 'number', format: 'float', minimum: '0' },\n },\n airExchangeUnit: {\n PARENTS : { ActiveReeferSettings: {} },\n DEFAULT : { type: 'string', enum: ['MQH', 'FQH']},\n },\n amendedBooking: {\n DEFAULT : { $ref: '#/components/schemas/AmendedBookingFullNotification' },\n },\n AmendedBookingFullNotification: {\n DEFAULT : { type: 'object', title: 'Amended Booking', allOf: true },\n },\n amendedBookingStatus: {\n PARENTS : { Booking: {}, BookingRefStatus: {}, BookingRefCancelledStatus: {}, BookingNotificationData: {}, CancelBookingRequest: { pseudoEnum: [] } },\n DEFAULT : { type: 'string', maxLength: 50, pseudoEnum: ['AMENDMENT_RECEIVED','AMENDMENT_CONFIRMED','AMENDMENT_DECLINED','AMENDMENT_CANCELLED'] },\n },\n amendedTransportDocument: {\n PARENTS : { TransportDocumentData: {}, TransportDocumentAmend: { $ref: '#/components/schemas/TransportDocument' } },\n DEFAULT : { $ref: '#/components/schemas/AmendedTransportDocumentFullNotification' }\n },\n AmendedTransportDocumentFullNotification: {\n DEFAULT : { type: 'object', title: 'Amended Transport Document Full Notification', allOf: true },\n },\n amendedTransportDocumentStatus: {\n PARENTS : { TransportDocumentData: {}, TransportDocumentAmend: {} },\n DEFAULT : { type: 'string', maxLength: 50, pseudoEnum: ['AMENDMENT_RECEIVED','AMENDMENT_CONFIRMED','AMENDMENT_DECLINED','AMENDMENT_CANCELLED'] },\n },\n ApproveTransportDocument: {\n DEFAULT : { type: 'object', title: 'Approve Transport Document', required: ['transportDocumentStatus'], CHILDREN: ['transportDocumentStatus'] },\n },\n arrival: {\n DEFAULT : { $ref: '#/components/schemas/PlaceOfArrival' },\n },\n arrivalDateTime: {\n PARENTS : { IntermediateCall: {} },\n DEFAULT : { type: 'string', format: 'date-time'}\n },\n auditReference: {\n PARENTS : { EndorsementChainLink: {},Transaction: {} },\n DEFAULT : { type: 'string', maxLength: 100 },\n },\n barge: {\n DEFAULT : { $ref: '#/components/schemas/Barge' },\n },\n Barge: {\n DEFAULT : { type: 'object', title: 'Barge', CHILDREN: ['vesselIMONumber','MMSINumber','name','flag','callSign','operatorCarrierCode','operatorCarrierCodeListProvider'] },\n },\n BargeTransport: {\n DEFAULT : { type: 'object', title: 'Barge Transport', required: ['modeOfTransport'], CHILDREN: ['modeOfTransport','portVisitReference','transportCallReference','servicePartners','universalServiceReference','universalExportVoyageReference','universalImportVoyageReference','barge'] },\n },\n Booking: {\n DEFAULT : { type: 'object', title: 'Booking', required: ['bookingStatus', 'receiptTypeAtOrigin', 'deliveryTypeAtDestination', 'cargoMovementTypeAtOrigin', 'cargoMovementTypeAtDestination', 'isEquipmentSubstitutionAllowed', 'shipmentLocations', 'requestedEquipments', 'documentParties'] },\n },\n booking: {\n DEFAULT : { $ref: '#/components/schemas/BookingFullNotification' },\n },\n bookingAgent: {\n PARENTS : { DocumentParties: {}, DocumentPartiesReq: {} },\n DEFAULT : { $ref: '#/components/schemas/BookingAgent' },\n },\n BookingAgent: {\n DEFAULT : { type: 'object', title: 'Booking Agent', required: ['partyName'], CHILDREN: ['partyName', 'address','addressLines', 'partyContactDetails', 'identifyingCodes', 'taxLegalReferences','reference']},\n },\n BookingFullNotification: {\n DEFAULT : { type: 'object', title: 'Booking Full Notification', allOf: true },\n },\n bookingChannelReference: {\n PARENTS : { CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {} },\n DEFAULT : { type: 'string', maxLength: 20, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n BookingRefCancelledStatus: {\n DEFAULT : { type: 'object', title: 'Cancelled Booking Response', required: ['bookingStatus'] },\n },\n BookingRefStatus: {\n DEFAULT : { type: 'object', title: 'Booking Response', required: ['bookingStatus'] },\n },\n BookingNotification: {\n DEFAULT : { type: 'object', title: 'Booking Notification', required: ['specversion', 'id', 'source', 'type', 'time', 'datacontenttype', 'subscriptionReference', 'data'] },\n },\n BookingNotificationData: {\n DEFAULT : { type: 'object', title: 'Data', required: ['bookingStatus'], CHILDREN: ['bookingStatus', 'amendedBookingStatus', 'bookingCancellationStatus', 'carrierBookingRequestReference', 'carrierBookingReference', 'feedbacks', 'booking', 'amendedBooking'] },\n },\n bookingStatus: {\n PARENTS : { Booking: {}, booking: {}, amendedBooking: {}, BookingRefStatus: {}, BookingNotificationData: {}, CancelBookingRequest: { pseudoEnum: [] } },\n DEFAULT : { type: 'string', maxLength: 50, pseudoEnum: ['RECEIVED','PENDING_UPDATE','UPDATE_RECEIVED','CONFIRMED','PENDING_AMENDMENT','REJECTED','DECLINED','CANCELLED','COMPLETED'] },\n },\n bookingCancellationStatus: {\n PARENTS : { Booking: {}, booking: {}, amendedBooking: {}, BookingRefStatus: {}, BookingNotificationData: {}, CancelBookingRequest: { pseudoEnum: [] } },\n DEFAULT : { type: 'string', maxLength: 50, pseudoEnum: ['CANCELLATION_RECEIVED','CANCELLATION_DECLINED','CANCELLATION_CONFIRMED'] },\n },\n buyer: {\n PARENTS : { DocumentParties: {}, DocumentPartiesShippingInstructions: {}, DocumentPartiesHouseBL: { $ref: '#/components/schemas/BuyerHBL' } },\n DEFAULT : { $ref: '#/components/schemas/Buyer' },\n },\n Buyer: {\n DEFAULT : { type: 'object', title: 'Buyer', required: ['partyName', 'typeOfPerson'], CHILDREN: ['partyName','typeOfPerson','address','addressLines','identifyingCodes','taxLegalReferences','partyContactDetails'] },\n },\n BuyerHBL: {\n DEFAULT : { type: 'object', title: 'Buyer (House B/L)', required: ['partyName', 'typeOfPerson'], CHILDREN: ['partyName','typeOfPerson','address','identifyingCodes','taxLegalReferences','partyContactDetails'] },\n },\n calculationBasis: {\n PARENTS : { Charge: {} },\n DEFAULT : { type: 'string', maxLength: 50, pattern: '^\\\\S(?:.*\\\\S)?$'},\n },\n callSign: {\n PARENTS : { Vessel: {}, Barge: {} },\n DEFAULT : { type: 'string', maxLength: 10, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n cancel: {\n DEFAULT : { type: 'boolean' },\n },\n Cancel: {\n DEFAULT : { type: 'object', title: 'Cancel', CHILDREN: ['reason','isFYI'] },\n },\n cancelled: {\n PARENTS : { PortCallService: {} },\n DEFAULT : { type: 'boolean', readOnly: 'true', default: 'false' },\n },\n CancelBookingRequest: {\n DEFAULT : { type: 'object', title: 'Cancel Booking Request', CHILDREN: ['reason'] },\n },\n CancelShippingInstructionsUpdate: {\n DEFAULT : { type: 'object', title: 'Cancel Shipping Instructions or Updated Shipping Instructions', CHILDREN: ['updatedShippingInstructionsStatus', 'shippingInstructionsStatus'] },\n },\n cargoGrossVolume: {\n PARENTS : { CommodityShipper: {}, Commodity: {}, CargoItem: {}, CargoItemShipper: {} },\n DEFAULT : { $ref: '#/components/schemas/CargoGrossVolume' },\n },\n CargoGrossVolume: {\n DEFAULT : { type: 'object', title: 'Cargo Gross Volume', required: ['value','unit'], CHILDREN: ['value','unit'] },\n },\n cargoGrossWeight: {\n PARENTS : { CommodityShipper: {}, Commodity: {}, CargoItem: {}, CargoItemShipper: {}, CargoItemHBL: {}, RequestedEquipment: { $ref: '#/components/schemas/CargoGrossWeightReq' }, RequestedEquipmentShipper: { $ref: '#/components/schemas/CargoGrossWeightReq' } },\n DEFAULT : { $ref: '#/components/schemas/CargoGrossWeight' },\n },\n CargoGrossWeight: {\n DEFAULT : { type: 'object', title: 'Cargo Gross Weight', required: ['value','unit'], CHILDREN: ['value','unit'] },\n },\n CargoGrossWeightReq: {\n DEFAULT : { type: 'object', title: 'Cargo Gross Weight (Requested Equipment)', required: ['value','unit'], CHILDREN: ['value','unit'] },\n },\n cargoNetVolume: {\n PARENTS : { CommodityShipper: {}, Commodity: {}, CargoItem: {}, CargoItemShipper: {} },\n DEFAULT : { $ref: '#/components/schemas/CargoNetVolume' },\n },\n CargoNetVolume: {\n DEFAULT : { type: 'object', title: 'Cargo Net Volume', required: ['value','unit'], CHILDREN: ['value','unit'] },\n },\n cargoNetWeight: {\n PARENTS : { CommodityShipper: {}, Commodity: {}, CargoItem: {}, CargoItemShipper: {} },\n DEFAULT : { $ref: '#/components/schemas/CargoNetWeight' },\n },\n CargoNetWeight: {\n DEFAULT : { type: 'object', title: 'Cargo Net Weight', required: ['value','unit'], CHILDREN: ['value','unit'] },\n },\n CargoItem: {\n DEFAULT : { type: 'object', title: 'Cargo Item', required: ['equipmentReference', 'cargoGrossWeight', 'outerPackaging'], CHILDREN: ['equipmentReference','cargoGrossWeight','cargoGrossVolume','cargoNetWeight','cargoNetVolume', 'exportLicense', 'importLicense','outerPackaging','nationalCommodityCodes','extendedNationalCommodityCodes','customsReferences'] },\n },\n CargoItemHBL: {\n DEFAULT : { type: 'object', title: 'Cargo Item (House B/L)', required: ['equipmentReference', 'cargoGrossWeight', 'outerPackaging'], CHILDREN: ['equipmentReference','cargoGrossWeight','outerPackaging'] },\n },\n cargoItems: {\n PARENTS : {\n ConsignmentItemShipper: { items: {$ref: '#/components/schemas/CargoItemShipper' } },\n ConsignmentItem : { items: {$ref: '#/components/schemas/CargoItem' } },\n ConsignmentItemHBL : { items: {$ref: '#/components/schemas/CargoItemHBL' } },\n },\n DEFAULT : { type: 'array', minItems: 1 },\n },\n CargoItemShipper: {\n DEFAULT : {type: 'object', title: 'Cargo Item (Shipper)', required: ['equipmentReference', 'cargoGrossWeight'], CHILDREN: ['equipmentReference','cargoGrossWeight','cargoGrossVolume','cargoNetWeight','cargoNetVolume', 'exportLicense', 'importLicense','outerPackaging','nationalCommodityCodes','extendedNationalCommodityCodes','houseBillOfLadingReference','customsReferences'] },\n },\n cargoMovementTypeAtOrigin: {\n PARENTS : { CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {}, TransportDocument: {}, transportDocument: {} },\n DEFAULT : { type: 'string', maxLength: 3, pseudoEnum: ['FCL','LCL'] },\n },\n cargoMovementTypeAtDestination: {\n PARENTS : { CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {}, TransportDocument: {}, transportDocument: {} },\n DEFAULT : { type: 'string', maxLength: 3, pseudoEnum: ['FCL','LCL'] },\n },\n carrierBookingOffice: {\n 'BKG_v2.0.x' : { PARENTS: { DocumentParties: {}, DocumentPartiesReq: {} } },\n// 'BKG_v2.0.1' : { PARENTS: { DocumentParties: {}, DocumentPartiesReq: {} } },\n// 'BKG_v2.0.2' : { PARENTS: { DocumentParties: {}, DocumentPartiesReq: {} } },\n// 'BKG_v2.0.3' : { PARENTS: { DocumentParties: {}, DocumentPartiesReq: {} } },\n PARENTS : { documentParties: {} },\n DEFAULT : { $ref: '#/components/schemas/CarrierBookingOffice' },\n },\n CarrierBookingOffice: {\n DEFAULT : { type: 'object', title: 'Carrier Booking Office', required: ['partyName', 'UNLocationCode'], CHILDREN: ['partyName','UNLocationCode','address','addressLines','partyContactDetails'] },\n },\n carrierBookingRequestReference: {\n PARENTS : { CreateBookingResponse: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {}, BookingRefStatus: {}, BookingRefCancelledStatus: {}, BookingNotificationData: {} },\n DEFAULT : { type: 'string', maxLength: 100, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n carrierBookingReference: {\n PARENTS : { UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {}, BookingRefStatus: {}, BookingRefCancelledStatus: {}, ConsignmentItem: {}, ConsignmentItemShipper: {}, BookingNotificationData: {} },\n DEFAULT : { type: 'string', maxLength: 35, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n carrierClauses: {\n PARENTS : { Booking: {}, booking: {}, amendedBooking: {}, TransportDocument: {}, transportDocument: {} },\n DEFAULT : { type: 'array', items: { type: 'string', maxLength: 20000, pattern: '^\\\\S(?:.*\\\\S)?$'} },\n },\n carrierCode: {\n PARENTS : { Moves:{}, booking: {}, amendedBooking: {}, CreateBooking: {}, UpdateBooking: {}, Booking: {}, CreateShippingInstructions: {}, UpdateShippingInstructions: {}, ShippingInstructions: {}, TransportDocument: {}, transportDocument: {}, ServicePartner: {}, ServicePartnerSchedule: {} },\n DEFAULT : { type: 'string', maxLength: 4, pattern: '^\\\\S+$' },\n },\n carrierCodeListProvider: {\n PARENTS : { Moves:{}, booking: {}, amendedBooking: {}, CreateBooking: {}, UpdateBooking: {}, Booking: {}, CreateShippingInstructions: {}, UpdateShippingInstructions: {}, ShippingInstructions: {}, TransportDocument: {}, transportDocument: {}, ServicePartner: {}, ServicePartnerSchedule: {} },\n DEFAULT : { type: 'string', enum: ['SMDG', 'NMFTA'] },\n },\n carrierExportVoyageNumber: {\n 'OVS_v3.0.x' : { DEFAULT: { type: 'string', maxLength: 50, pattern: null } },\n PARENTS : { TerminalTimestamp: {}, CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {}, Transport: {}, VesselVoyage: {}, TerminalCall: {}, TransportCall: {}, ServicePartner: {}, ServicePartnerSchedule: {}, departingVesselVoyage: {} },\n DEFAULT : { type: 'string', maxLength: 50, pattern: '^\\\\S(?:.*\\\\S)?$'},\n },\n carrierImportVoyageNumber: {\n 'OVS_v3.0.x' : { DEFAULT: { type: 'string', maxLength: 50, pattern: null } },\n PARENTS : { TerminalTimestamp: {}, Transport: {}, TerminalCall: {}, TransportCall: {}, ServicePartner: {}, ServicePartnerSchedule: {} },\n DEFAULT : { type: 'string', maxLength: 50, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n carriersAgentAtDestination: {\n PARENTS : { DocumentParties: {} },\n DEFAULT : { $ref: '#/components/schemas/CarriersAgentAtDestination' },\n },\n CarriersAgentAtDestination: {\n DEFAULT : { type: 'object', title: 'Carrier\\'s Agent At Destination', required: ['partyName', 'address', 'partyContactDetails'], CHILDREN: ['partyName','address','addressLines','partyContactDetails'] },\n },\n carrierServiceCode: {\n 'OVS_v3.0.x' : { DEFAULT: { type: 'string', maxLength: 11, pattern:null } },\n PARENTS : { TerminalTimestamp: {}, TerminalCall: {}, CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {}, Transport: {}, ServiceSchedule: {}, ServicePartner: {}, ServicePartnerSchedule: {}, departingVesselVoyage: {} },\n DEFAULT : { type: 'string', maxLength: 11, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n carrierServiceName: {\n 'OVS_v3.0.x' : { DEFAULT: { type: 'string', maxLength: 50, pattern:null } },\n PARENTS : { TerminalTimestamp: {}, TerminalCall: {}, CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {}, ServiceSchedule: {}, ServicePartner: {}, ServicePartnerSchedule: {} },\n DEFAULT : { type: 'string', maxLength: 50, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n carrierSCACCode: {\n DEFAULT : { type: 'string', pattern: '^\\\\S+$', maxLength: 4 },\n },\n changeRemark: {\n 'OVS_v3.0.x' : { DEFAULT: { type: 'string', maxLength: 250 } },\n },\n Charge: {\n DEFAULT : { type: 'object', title: 'Charge', required: ['chargeName', 'currencyAmount', 'currencyCode', 'paymentTermCode', 'calculationBasis', 'unitPrice', 'quantity'], CHILDREN: ['chargeName', 'extendedChargeName','currencyAmount','currencyCode','paymentTermCode','calculationBasis','unitPrice','quantity'] },\n },\n chargeName: {\n PARENTS : { Charge: {} },\n DEFAULT : { type: 'string', maxLength: 50, pattern: '^\\\\S(?:.*\\\\S)?$', deprecated: true },\n },\n charges: {\n PARENTS : { Booking: {}, booking: {}, amendedBooking: {}, TransportDocument: {}, transportDocument: {} },\n DEFAULT : { type: 'array', items: {$ref: '#/components/schemas/Charge'}},\n },\n city: {\n 'OVS_v3.0.x' : { DEFAULT: { maxLength: 65, pattern: null } },\n PARENTS : { PortOfLoading: { type: null, maxLength: null, pattern: null, $ref: '#/components/schemas/City' }, PortOfDischarge: { type: null, maxLength: null, pattern: null, $ref: '#/components/schemas/City' }, address: {}, Address: {}, AddressHBL: {}, PartyAddress: {}, City: {} },\n DEFAULT : { type: 'string', maxLength: 35, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n City: {\n DEFAULT : { type: 'object', title: 'City', required: ['city', 'countryCode'], CHILDREN: ['city','stateRegion','countryCode'] },\n },\n classifierCode: {\n 'OVS_HUB_TER_v1.0.x' : { DEFAULT: { enum: ['ACT', 'EST'] } },\n PARENTS : { Timestamp: {} },\n DEFAULT : { type: 'string', enum: ['ACT', 'EST', 'PLN', 'REQ'], pseudoEnum: [] }, // No validation is done on description\n },\n co2: {\n PARENTS : { footprint: {}, solutionFootprint: {} },\n DEFAULT : { type: 'number', format: 'double' },\n },\n co2e: {\n PARENTS : { footprint: {}, solutionFootprint: {} },\n DEFAULT : { type: 'number', format: 'double' },\n },\n co2Setpoint: {\n PARENTS : { ActiveReeferSettings: {} },\n DEFAULT : { type: 'number', format: 'float', minimum: '0', maximum: 100 },\n },\n code: {\n PARENTS : { Feedback: {} },\n DEFAULT : { type: 'string', maxLength: 50, pseudoEnum: ['INFORMATIONAL_MESSAGE','PROPERTY_WILL_BE_IGNORED','PROPERTY_VALUE_MUST_CHANGE','PROPERTY_VALUE_HAS_BEEN_CHANGED','PROPERTY_VALUE_MAY_CHANGE','PROPERTY_HAS_BEEN_DELETED'] },\n },\n codedVariantList: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { type: 'string', minLength: 4, maxLength: 4, pattern: '^[0-3][0-9A-Z]{3}$' },\n },\n codeListName: {\n PARENTS : { IdentifyingCode: {}, identifyingCode: {} },\n DEFAULT : { type: 'string', maxLength: 100, pseudoEnum: ['DID','LEI','DUNS'] },\n },\n codeListProvider: {\n 'EBL_SUR_v3.0.x' : { DEFAULT: { pseudoEnum: ['WAVE','CARX','ESSD','IDT','BOLE','EDOX','IQAX','SECR','TRGO','ETEU','TRAC','BRIT','COVA','ETIT','KTNE','CRED','BLOC','DOCU','AEOT','SGTD','GSBN','WISE','GLEIF','W3C','DNB','FMC','DCSA','ZZZ','NONE'] } },\n 'BKG_v2.0.0' : { DEFAULT: { type: 'string', maxLength: 100, pseudoEnum: ['WAVE','CARX','ESSD','IDT','BOLE','EDOX','IQAX','SECR','TRGO','ETEU','TRAC','BRIT','GSBN','WISE','GLEIF','W3C','DNB','FMC','DCSA','ZZZ'] } },\n 'BKG_v2.0.1' : { DEFAULT: { type: 'string', maxLength: 100, pseudoEnum: ['WAVE','CARX','ESSD','IDT','BOLE','EDOX','IQAX','SECR','TRGO','ETEU','TRAC','BRIT','GSBN','WISE','GLEIF','W3C','DNB','FMC','DCSA','ZZZ'] } },\n PARENTS : { IdentifyingCode: {} },\n DEFAULT : { type: 'string', maxLength: 100, pseudoEnum: ['WAVE','CARX','ESSD','IDT','BOLE','EDOX','IQAX','SECR','TRGO','ETEU','TRAC','BRIT','COVA','ETIT','KTNE','CRED','BLOC','DOCU','AEOT','SGTD','GSBN','WISE','GLEIF','W3C','DNB','FMC','DCSA','ZZZ'] },\n },\n comments: {\n PARENTS : { SurrenderRequestAnswer: {}, SurrenderRequestDetails: {}, Transaction: {} },\n DEFAULT : { type: 'string', maxLength: 255, pattern: '^\\\\S(?:.*\\\\S)?$'},\n },\n commodities: {\n PARENTS : { RequestedEquipment: { items: { $ref: '#/components/schemas/Commodity' } }, RequestedEquipmentShipper: { items: { $ref: '#/components/schemas/CommodityShipper' } } },\n DEFAULT : { type: 'array' },\n },\n CommodityShipper: {\n DEFAULT : { type: 'object', title: 'Commodity (Shipper)', required: ['commodityType'], CHILDREN: ['commodityType','HSCodes','extendedHSCodes','nationalCommodityCodes','extendedNationalCommodityCodes','cargoGrossWeight','cargoGrossVolume','cargoNetWeight','cargoNetVolume','exportLicense','importLicense','outerPackaging','references','customsReferences'] },\n },\n Commodity: {\n DEFAULT : { type: 'object', title: 'Commodity', required: ['commodityType'], CHILDREN: ['commoditySubReference', 'commodityType','HSCodes','extendedHSCodes','nationalCommodityCodes','extendedNationalCommodityCodes','cargoGrossWeight','cargoGrossVolume','cargoNetWeight','cargoNetVolume','exportLicense','importLicense','outerPackaging','references','customsReferences'] },\n },\n commoditySubReference: {\n PARENTS : { Commodity: {}, ConsignmentItemShipper: {} },\n DEFAULT : { type: 'string', maxLength: 100, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n commodityType: {\n PARENTS : { CommodityShipper: {}, Commodity: {} },\n DEFAULT : { type: 'string', maxLength: 550, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n competentAuthorityApproval: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { type: 'string', maxLength: 70, pattern:'^\\\\S(?:.*\\\\S)?$' },\n },\n confirmedEquipments: {\n PARENTS : { Booking: {}, booking: {}, amendedBooking: {} },\n DEFAULT : { type: 'array', items: { $ref: '#/components/schemas/ConfirmedEquipment' } },\n },\n ConfirmedEquipment: {\n 'BKG_v2.0.0' : { DEFAULT: { type: 'object', title: 'Confirmed Equipment', required: ['ISOEquipmentCode', 'units'], CHILDREN: ['ISOEquipmentCode','units','containerPositionings','emptyContainerPickup'] } },\n 'BKG_v2.0.1' : { DEFAULT: { type: 'object', title: 'Confirmed Equipment', required: ['ISOEquipmentCode', 'units'], CHILDREN: ['ISOEquipmentCode','units','containerPositionings','emptyContainerPickup'] } },\n DEFAULT : { type: 'object', title: 'Confirmed Equipment', required: ['ISOEquipmentCode', 'units'], CHILDREN: ['ISOEquipmentCode','units','containerPositionings','emptyContainerPickup','originEmptyContainerPickup'] },\n },\n consignee: {\n 'BKG_v2.0.x' : { PARENTS: { DocumentParties: {}, DocumentPartiesReq: {} } },\n// 'BKG_v2.0.1' : { PARENTS: { DocumentParties: {}, DocumentPartiesReq: {} } },\n// 'BKG_v2.0.2' : { PARENTS: { DocumentParties: {}, DocumentPartiesReq: {} } },\n// 'BKG_v2.0.3' : { PARENTS: { DocumentParties: {}, DocumentPartiesReq: {} } },\n PARENTS : { DocumentParties: {}, DocumentPartiesShippingInstructions: { $ref: '#/components/schemas/ConsigneeShipper' }, DocumentPartiesHouseBL: {$ref: '#/components/schemas/ConsigneeHBL'} },\n DEFAULT : { $ref: '#/components/schemas/Consignee' },\n },\n Consignee: {\n 'BKG_v2.0.x' : { DEFAULT: { required: ['partyName'], CHILDREN: ['partyName','eblPlatform','address','addressLines','partyContactDetails','identifyingCodes','taxLegalReferences','reference','purchaseOrderReferences', 'isNotifyParty'] } },\n// 'BKG_v2.0.1' : { DEFAULT: { required: ['partyName'], CHILDREN: ['partyName','address','partyContactDetails','identifyingCodes','taxLegalReferences','reference','purchaseOrderReferences'] } },\n// 'BKG_v2.0.2' : { DEFAULT: { required: ['partyName'], CHILDREN: ['partyName','address','partyContactDetails','identifyingCodes','taxLegalReferences','reference','purchaseOrderReferences'] } },\n// 'BKG_v2.0.3' : { DEFAULT: { required: ['partyName'], CHILDREN: ['partyName','address','partyContactDetails','identifyingCodes','taxLegalReferences','reference','purchaseOrderReferences'] } },\n DEFAULT : { type: 'object', title: 'Consignee', required: ['partyName','identifyingCodes'], CHILDREN: ['partyName','eblPlatform','typeOfPerson','address','addressLines','displayedAddress','identifyingCodes','taxLegalReferences','partyContactDetails','reference','purchaseOrderReferences', 'isNotifyParty'] },\n },\n ConsigneeShipper: {\n DEFAULT : { type: 'object', title: 'Consignee (Shipper provided)', required: ['partyName'], CHILDREN: ['partyName','eblPlatform','typeOfPerson','address','addressLines','displayedAddress','identifyingCodes','taxLegalReferences','partyContactDetails','reference','purchaseOrderReferences', 'isNotifyParty'] },\n },\n ConsigneeHBL: {\n DEFAULT : { type: 'object', title: 'Consignee (House B/L)', required: ['partyName', 'typeOfPerson'], CHILDREN: ['partyName','typeOfPerson','address','identifyingCodes','taxLegalReferences','partyContactDetails'] },\n },\n consignmentItems: {\n PARENTS : {HouseBillOfLading: { items: { $ref: '#/components/schemas/ConsignmentItemHBL' } }, CreateShippingInstructions: { items: { $ref: '#/components/schemas/ConsignmentItemShipper' } }, UpdateShippingInstructions: { items: { $ref: '#/components/schemas/ConsignmentItemShipper' } }, ShippingInstructions: { items: { $ref: '#/components/schemas/ConsignmentItemShipper' } }, shippingInstructions: { items: { $ref: '#/components/schemas/ConsignmentItemShipper' } }, updatedShippingInstructions: { items: { $ref: '#/components/schemas/ConsignmentItemShipper' } }, TransportDocument: { items: { $ref: '#/components/schemas/ConsignmentItem' } }, transportDocument: { items: { $ref: '#/components/schemas/ConsignmentItem' } } },\n DEFAULT : { type: 'array', minItems: 1 },\n },\n// ConsignmentItem: {\n// DEFAULT : { type: 'object', title: 'Consignment Item', required: ['carrierBookingReference', 'descriptionOfGoods', 'HSCodes'], CHILDREN: ['carrierBookingReference','descriptionOfGoods','HSCodes','shippingMarks','references','customsReferences'] },\n// },\n ConsignmentItem: {\n DEFAULT : { type: 'object', title: 'Consignment Item', required: ['carrierBookingReference', 'descriptionOfGoods', 'HSCodes', 'cargoItems'], CHILDREN: ['carrierBookingReference','descriptionOfGoods','HSCodes','extendedHSCodes','nationalCommodityCodes','extendedNationalCommodityCodes','shippingMarks','cargoItems', 'exportLicense', 'importLicense', 'references','customsReferences'] },\n },\n ConsignmentItemShipper: {\n DEFAULT : { type: 'object', title: 'Consignment Item (Shipper)', required: ['carrierBookingReference', 'descriptionOfGoods', 'HSCodes', 'cargoItems'], CHILDREN: ['carrierBookingReference','commoditySubReference', 'descriptionOfGoods','descriptionOfGoodsForCustoms','HSCodes','extendedHSCodes','nationalCommodityCodes','extendedNationalCommodityCodes','shippingMarks','shippingMarksForCustoms','cargoItems', 'exportLicense', 'importLicense','references','customsReferences'], allOf: true },\n },\n ConsignmentItemHBL: {\n DEFAULT : { type: 'object', title: 'Consignment Item (House B/L)', required: ['descriptionOfGoods', 'cargoItems', 'nationalCommodityCode'], CHILDREN: ['descriptionOfGoods','nationalCommodityCode','extendedNationalCommodityCodes','cargoItems','customsReferences'] },\n },\n contact: {\n PARENTS : { EmergencyContactDetails: {} },\n DEFAULT : { type: 'string', maxLength: 255 },\n },\n ContainerUnits: {\n DEFAULT : { type: 'object', title: 'Container Units', required: ['_20_units', '_40_units', '_45_units'], CHILDREN: ['_20_units', '_40_units', '_45_units'] },\n },\n ContainerPositioning: {\n DEFAULT : { type: 'object', title: 'Container Positioning', required: ['location'], CHILDREN: ['dateTime', 'location' ] },\n },\n ContainerPositioningEstimated: {\n DEFAULT : { type: 'object', title: 'Container Positioning Estimated', required: ['location'], CHILDREN: ['estimatedDateTime', 'location' ] },\n },\n containerPositionings : {\n PARENTS : { RequestedEquipment: {}, RequestedEquipmentShipper: {}, ConfirmedEquipment: { items: { $ref: '#/components/schemas/ContainerPositioningEstimated' } }},\n DEFAULT : { type: 'array', items: { $ref: '#/components/schemas/ContainerPositioning' } },\n },\n ContainerPositioningLocation: {\n DEFAULT : { type: 'object', title: 'Container Positioning Location', CHILDREN: ['locationName', 'facilityName', 'address','addressLines', 'facility','UNLocationCode','geoCoordinate' ] },\n },\n ContainerRestows: {\n DEFAULT : { type: 'object', title: 'Container units to restow', required: ['_20_units', '_40_units', '_45_units'], CHILDREN: ['_20_units', '_40_units', '_45_units'] },\n },\n content: {\n PARENTS : { SupportingDocument: {} },\n DEFAULT : { type: 'string', format: 'byte' },\n },\n contentType: {\n PARENTS : { SupportingDocument: {} },\n DEFAULT : { type: 'string', maxLength: 100, default: 'application/pdf' },\n },\n contractQuotationReference: {\n PARENTS : { CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {}, TransportDocument: {}, transportDocument: {} },\n DEFAULT : { type: 'string', maxLength: 35, pattern: '^\\\\S(?:.*\\\\S)?$', deprecated: true },\n },\n controlTrackingRegistry: {\n DEFAULT : { type: 'string', maxLength: 1024, format: 'uri' },\n },\n country: {\n 'OVS_v3.0.x' : { DEFAULT: { type: 'string', maxLength: 75 } },\n },\n countryCode: {\n PARENTS : { PlaceOfAcceptance: {}, PlaceOfFinalDelivery: {}, PlaceOfBLIssue: {}, PlaceOfIssue: {}, address: {}, City: {}, Address: {}, AddressHBL: {}, PartyAddress: {}, AdvanceManifestFiling: {}, TaxLegalReference: {}, CustomsReference: {}, NationalCommodityCode: {}, ExtendedNationalCommodityCode: {} },\n DEFAULT : { type: 'string', maxLength: 2, minLength: 2, pattern: '^[A-Z]{2}$' },\n },\n CreateBooking: {\n DEFAULT : { type: 'object', title: 'Create Booking', required: ['receiptTypeAtOrigin', 'deliveryTypeAtDestination', 'cargoMovementTypeAtOrigin', 'cargoMovementTypeAtDestination', 'isEquipmentSubstitutionAllowed', 'shipmentLocations', 'requestedEquipments', 'documentParties'] },\n },\n CreateBookingResponse: {\n DEFAULT : { type: 'object', title: 'Create Booking Response', required: ['carrierBookingRequestReference'], CHILDREN: ['carrierBookingRequestReference'] },\n },\n CreateShippingInstructions: {\n DEFAULT : { type: 'object', title: 'Create Shipping Instructions', required: ['transportDocumentTypeCode', 'isShippedOnBoardType', 'isElectronic', 'isToOrder', 'freightPaymentTermCode', 'partyContactDetails', 'documentParties', 'isCargoDeliveredInICS2Zone', 'consignmentItems', 'utilizedTransportEquipments'] },\n },\n CreateShippingInstructionsResponse: {\n DEFAULT : { type: 'object', title: 'Create Shipping Instructions Response', required: ['shippingInstructionsReference'], CHILDREN: ['shippingInstructionsReference'] },\n },\n currencyAmount: {\n PARENTS : { Charge: {} },\n DEFAULT : { type: 'number', format: 'float', minimum: '0' },\n },\n currencyCode: {\n PARENTS : { Charge: {} },\n DEFAULT : { type: 'string', pattern: '^[A-Z]{3}$', minLength: 3, maxLength: 3 },\n },\n CustomsReference: {\n DEFAULT : { type: 'object', title: 'Customs Reference', required: ['type', 'countryCode', 'values'], CHILDREN: ['type','countryCode','values'] },\n },\n customsReferences: {\n PARENTS : { CreateShippingInstructions: {}, UpdateShippingInstructions: {}, ShippingInstructions: {}, CreateBooking: {}, UpdateBooking: {}, Booking: {}, ConsignmentItem: {}, ConsignmentItemShipper: {}, ConsignmentItemHBL: {}, CargoItemCarrier: {}, CargoItemShipper: {}, UtilizedTransportEquipmentCarrier: {}, UtilizedTransportEquipmentShipper: {}, TransportDocument: {}, transportDocument: {}, UtilizedTransportEquipment: {}, CargoItem: {}, RequestedEquipment: {}, RequestedEquipmentShipper: {}, Commodity: {}, CommodityShipper: {} },\n DEFAULT : { type: 'array', items: { $ref: '#/components/schemas/CustomsReference' } },\n },\n cutOffDateTime: {\n PARENTS : { ShipmentCutOffTime: {}, CutOffTime: {} },\n DEFAULT : { type: 'string', format: 'date-time' },\n },\n cutOffDateTimeCode: {\n PARENTS : { ShipmentCutOffTime: { pseudoEnum: ['DCO','VCO','FCO','LCO','EFC'] }, CutOffTime: { pseudoEnum: ['DCO','VCO','FCO','LCO','PCO','ECP','EFC','RCO','DGC','OBC','TCO','STA','SPA','CUA','AFC'] } },\n DEFAULT : { type: 'string', maxLength: 3 },\n },\n CutOffTime: {\n DEFAULT : { type: 'object', title: 'Cut-Off Time', required: ['cutOffDateTimeCode', 'cutOffDateTime'], CHILDREN: ['cutOffDateTimeCode','cutOffDateTime'] },\n },\n cutOffTimes: {\n PARENTS : { PointToPoint: {}, Leg: {}, Schedule: {}, TransportCall: {} },\n DEFAULT : { type: 'array', items: {$ref: '#/components/schemas/CutOffTime'} },\n },\n dangerousGoods: {\n PARENTS : { OuterPackaging: {}, OuterPackagingCarrier: {} },\n DEFAULT : { type: 'array', items: { $ref: '#/components/schemas/DangerousGoods' } },\n },\n DangerousGoods: {\n 'BKG_v2.0.x' : { DEFAULT: { required: ['properShippingName', 'imoClass', 'isMarinePollutant', 'isLimitedQuantity', 'isExceptedQuantity', 'isSalvagePackings', 'isEmptyUncleanedResidue', 'isWaste', 'isHot', 'isCompetentAuthorityApprovalRequired', 'isReportableQuantity', 'emergencyContactDetails', 'grossWeight'], CHILDREN: ['codedVariantList','properShippingName','technicalName','imoClass','subsidiaryRisk1','subsidiaryRisk2','isMarinePollutant','packingGroup','isLimitedQuantity','isExceptedQuantity','isSalvagePackings','isEmptyUncleanedResidue','isWaste','isHot','isCompetentAuthorityApprovalRequired','competentAuthorityApproval','segregationGroups','innerPackagings','emergencyContactDetails','EMSNumber','endOfHoldingTime','fumigationDateTime','isReportableQuantity','inhalationZone','grossWeight','netWeight','netExplosiveContent','netVolume','limits','specialCertificateNumber','additionalContainerCargoHandling'] } },\n// 'BKG_v2.0.1' : { DEFAULT: { required: ['properShippingName', 'imoClass', 'isMarinePollutant', 'isLimitedQuantity', 'isExceptedQuantity', 'isSalvagePackings', 'isEmptyUncleanedResidue', 'isWaste', 'isHot', 'isCompetentAuthorityApprovalRequired', 'isReportableQuantity', 'emergencyContactDetails', 'grossWeight'], CHILDREN: ['codedVariantList','properShippingName','technicalName','imoClass','subsidiaryRisk1','subsidiaryRisk2','isMarinePollutant','packingGroup','isLimitedQuantity','isExceptedQuantity','isSalvagePackings','isEmptyUncleanedResidue','isWaste','isHot','isCompetentAuthorityApprovalRequired','competentAuthorityApproval','segregationGroups','innerPackagings','emergencyContactDetails','EMSNumber','endOfHoldingTime','fumigationDateTime','isReportableQuantity','inhalationZone','grossWeight','netWeight','netExplosiveContent','netVolume','limits','specialCertificateNumber','additionalContainerCargoHandling'] } },\n// 'BKG_v2.0.2' : { DEFAULT: { required: ['properShippingName', 'imoClass', 'isMarinePollutant', 'isLimitedQuantity', 'isExceptedQuantity', 'isSalvagePackings', 'isEmptyUncleanedResidue', 'isWaste', 'isHot', 'isCompetentAuthorityApprovalRequired', 'isReportableQuantity', 'emergencyContactDetails', 'grossWeight'], CHILDREN: ['codedVariantList','properShippingName','technicalName','imoClass','subsidiaryRisk1','subsidiaryRisk2','isMarinePollutant','packingGroup','isLimitedQuantity','isExceptedQuantity','isSalvagePackings','isEmptyUncleanedResidue','isWaste','isHot','isCompetentAuthorityApprovalRequired','competentAuthorityApproval','segregationGroups','innerPackagings','emergencyContactDetails','EMSNumber','endOfHoldingTime','fumigationDateTime','isReportableQuantity','inhalationZone','grossWeight','netWeight','netExplosiveContent','netVolume','limits','specialCertificateNumber','additionalContainerCargoHandling'] } },\n// 'BKG_v2.0.3' : { DEFAULT: { required: ['properShippingName', 'imoClass', 'isMarinePollutant', 'isLimitedQuantity', 'isExceptedQuantity', 'isSalvagePackings', 'isEmptyUncleanedResidue', 'isWaste', 'isHot', 'isCompetentAuthorityApprovalRequired', 'isReportableQuantity', 'emergencyContactDetails', 'grossWeight'], CHILDREN: ['codedVariantList','properShippingName','technicalName','imoClass','subsidiaryRisk1','subsidiaryRisk2','isMarinePollutant','packingGroup','isLimitedQuantity','isExceptedQuantity','isSalvagePackings','isEmptyUncleanedResidue','isWaste','isHot','isCompetentAuthorityApprovalRequired','competentAuthorityApproval','segregationGroups','innerPackagings','emergencyContactDetails','EMSNumber','endOfHoldingTime','fumigationDateTime','isReportableQuantity','inhalationZone','grossWeight','netWeight','netExplosiveContent','netVolume','limits','specialCertificateNumber','additionalContainerCargoHandling'] } },\n DEFAULT : { type: 'object', title: 'Dangerous Goods', oneOf: true, required: ['properShippingName', 'imoClass'], CHILDREN: ['codedVariantList','properShippingName','technicalName','imoClass','subsidiaryRisk1','subsidiaryRisk2','isMarinePollutant','packingGroup','isLimitedQuantity','isExceptedQuantity','isSalvagePackings','isEmptyUncleanedResidue','isWaste','isHot','isCompetentAuthorityApprovalRequired','competentAuthorityApproval','segregationGroups','innerPackagings','emergencyContactDetails','EMSNumber','endOfHoldingTime','fumigationDateTime','isReportableQuantity','inhalationZone','grossWeight','netWeight','netExplosiveContent','netVolume','limits'] },\n },\n data: {\n PARENTS : { BookingNotification: { $ref: '#/components/schemas/BookingNotificationData' }, ShippingInstructionsNotification: { $ref: '#/components/schemas/ShippingInstructionsData' }, TransportDocumentNotification: { $ref: '#/components/schemas/TransportDocumentData' } },\n DEFAULT : { type: 'object', title: 'Data' },\n },\n datacontenttype: {\n PARENTS : DCSA_CLOUDEVENT_GROUP,\n DEFAULT : { type: 'string', enum: ['application/json'], pseudoEnum: [] },\n },\n dateTime: {\n PARENTS : { Timestamp: {}, PlaceOfReceipt: {}, ContainerPositioning: {}, EmptyContainerPickup: {}, OriginEmptyContainerPickup: {}, PlaceOfDelivery: {}, PlaceOfArrival: {}, PlaceOfDeparture: {} },\n DEFAULT : { type: 'string', format: 'date-time'}\n },\n declaredValue: {\n PARENTS : { CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {}, TransportDocument: {}, transportDocument: {} },\n DEFAULT : { type: 'number', format: 'float', minimum: '0' },\n },\n declaredValueCurrency: {\n PARENTS : { CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {}, TransportDocument: {}, transportDocument: {} },\n DEFAULT : { type: 'string', minLength: 3, maxLength: 3, pattern: '^[A-Z]{3}$' },\n },\n decline: {\n DEFAULT : { type: 'boolean' },\n },\n Decline: {\n DEFAULT : { type: 'object', title: 'Decline', CHILDREN: ['reason','isFYI'] },\n },\n declined: {\n PARENTS : { PortCallService: {} },\n DEFAULT : { type: 'boolean', readOnly: 'true', default: 'false' },\n },\n delayReasonCode: {\n 'OVS_v3.0.x' : { DEFAULT: { deprecated: true } },\n DEFAULT : { type: 'string', maxLength: 3 },\n },\n delayReasonCodes: {\n DEFAULT : { type: 'array', items: { type: 'string', maxLength: 3} },\n },\n deliveryTypeAtDestination: {\n PARENTS : { CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {}, TransportDocument: {}, transportDocument: {}, PointToPoint: {} },\n DEFAULT : { type: 'string', maxLength: 3, enum: ['CY', 'SD', 'CFS'] },\n },\n departingVesselVoyage: {\n PARENTS : { ShipmentLocation: {} },\n DEFAULT : { type: 'object', title: \"Vessel Voyage\" },\n },\n departure: {\n DEFAULT : { $ref: '#/components/schemas/PlaceOfDeparture' },\n },\n departureDateTime: {\n PARENTS : { IntermediateCall: {} },\n DEFAULT : { type: 'string', format: 'date-time'}\n },\n depotReleaseLocation: {\n DEFAULT : { $ref: '#/components/schemas/EmptyContainerDepotReleaseLocation' },\n },\n description: {\n PARENTS : { OuterPackaging: {}, InnerPackaging: {}, OuterPackagingShipper: {} },\n DEFAULT : { type: 'string', maxLength: 100 },\n },\n descriptionOfGoods: {\n PARENTS : { ConsignmentItem: {}, ConsignmentItemShipper: {}, ConsignmentItemHBL: { type: 'string', maxItems: null, maxLength: 512, items: null, pattern: '^\\\\S(?:.*\\\\S)?$'} },\n DEFAULT : { type: 'array', maxItems: 150, items: { type: 'string', maxLength: 35, pattern: '^\\\\S(?:.*\\\\S)?$' } },\n },\n descriptionOfGoodsForCustoms: {\n PARENTS : { ConsignmentItemShipper: {} },\n DEFAULT : { type: 'array', maxItems: 150, items: { type: 'string', maxLength: 35 } },\n },\n destinationChargesPaymentTerm: {\n PARENTS : { CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {}, CreateShippingInstructions: {}, UpdateShippingInstructions: {}, ShippingInstructions: {}, updatedShippingInstructions: {}, shippingInstructions: {} },\n DEFAULT : { $ref: '#/components/schemas/DestinationChargesPaymentTerm' },\n },\n DestinationChargesPaymentTerm: {\n DEFAULT : { type: 'object', title: 'Destination Charges Payment Term', CHILDREN: ['haulageChargesPaymentTermCode','portChargesPaymentTermCode','otherChargesPaymentTermCode'] },\n },\n DetailedError: {\n 'OVS_v3.0.x' : { DEFAULT: { required: ['errorCodeText'], CHILDREN: ['errorCode','property','value','jsonPath','errorCodeText','erorCodeMessage'] } },\n DEFAULT : { type: 'object', title: 'Detailed Error', required: ['errorCodeText', 'errorCodeMessage'], CHILDREN: ['errorCode','property','value','jsonPath','errorCodeText','errorCodeMessage'] },\n },\n dimensionUnit: {\n DEFAULT : { type: 'string', enum: ['MTR', 'FOT'] },\n },\n dischargeLocation: {\n PARENTS : {Transport: {$ref:'#/components/schemas/DischargeLocation' } },\n },\n DischargeLocation: {\n DEFAULT : { type: 'object', title: 'Discharge Location', CHILDREN: ['locationName', 'facilityName', 'address','addressLines', 'facility', 'UNLocationCode'] },\n },\n dischargeUnits: {\n DEFAULT : { $ref: '#/components/schemas/DischargeUnits' }\n },\n DischargeUnits: {\n DEFAULT : { type: 'object', title: 'Discharge Units', CHILDREN: ['ladenContainerUnits','emptyContainerUnits','reeferPluggedContainerUnits','oogUnits'] },\n },\n displayedAddress: {\n PARENTS : { Shipper: {}, ShipperShipper: {}, Consignee: {}, ConsigneeShipper: {}, Endorsee: {}, EndorseeShipper: {}, NotifyParty: {}, NotifyPartyShipper: {} },\n DEFAULT : { type: 'array', maxItems: 6, items: { type: 'string', maxLength: 35 } },\n },\n displayedNameForPlaceOfDelivery: {\n PARENTS : { CreateShippingInstructions: {}, UpdateShippingInstructions: {}, ShippingInstructions: {}, updatedShippingInstructions: {}, shippingInstructions: {}, TransportDocument: {}, transportDocument: {} },\n DEFAULT : { type: 'array', maxItems: 5, items: { type: 'string', maxLength: 35 } },\n },\n displayedNameForPlaceOfReceipt: {\n PARENTS : { CreateShippingInstructions: {}, UpdateShippingInstructions: {}, ShippingInstructions: {}, updatedShippingInstructions: {}, shippingInstructions: {}, TransportDocument: {}, transportDocument: {} },\n DEFAULT : { type: 'array', maxItems: 5, items: { type: 'string', maxLength: 35 } },\n },\n displayedNameForPortOfDischarge: {\n PARENTS : { CreateShippingInstructions: {}, UpdateShippingInstructions: {}, ShippingInstructions: {}, updatedShippingInstructions: {}, shippingInstructions: {}, TransportDocument: {}, transportDocument: {} },\n DEFAULT : { type: 'array', maxItems: 5, items: { type: 'string', maxLength: 35 } },\n },\n displayedNameForPortOfLoad: {\n PARENTS : { CreateShippingInstructions: {}, UpdateShippingInstructions: {}, ShippingInstructions: {}, updatedShippingInstructions: {}, shippingInstructions: {}, TransportDocument: {}, transportDocument: {} },\n DEFAULT : { type: 'array', maxItems: 5, items: { type: 'string', maxLength: 35 } },\n },\n displayedShippedOnBoardReceivedForShipment: {\n DEFAULT : { type: 'string', pattern: '^\\\\S(?:.*\\\\S)?$', maxLength: 250 },\n },\n document: {\n PARENTS : { IssuanceRequest: {} },\n DEFAULT : { $ref: '#/components/schemas/TransportDocument' },\n },\n documentChecksum: {\n DEFAULT : { type: 'string', pattern: '^[0-9a-f]+$', maxLength: 64, minLength: 64, $ref: '#/components/schemas/DocumentChecksum' },\n },\n DocumentChecksum: {\n DEFAULT : { type: 'string', pattern: '^[0-9a-f]+$', maxLength: 64, minLength: 64 },\n },\n DocumentMetadata: {\n DEFAULT : { type: 'object', title: 'Document Metadata', required: ['name','size','mediaType','documentChecksum'], CHILDREN: ['name','size','mediaType','documentChecksum'] },\n },\n documentParties: {\n 'BKG_v2.0.x' : { PARENTS: {Booking: { $ref: '#/components/schemas/DocumentParties' }, booking: { $ref: '#/components/schemas/DocumentParties' }, amendedBooking: { $ref: '#/components/schemas/DocumentParties' }, CreateBooking: { $ref: '#/components/schemas/DocumentPartiesReq' }, UpdateBooking: {$ref: '#/components/schemas/DocumentPartiesReq'} } },\n// 'BKG_v2.0.1' : { PARENTS: {Booking: { $ref: '#/components/schemas/DocumentParties' }, booking: { $ref: '#/components/schemas/DocumentParties' }, amendedBooking: { $ref: '#/components/schemas/DocumentParties' }, CreateBooking: { $ref: '#/components/schemas/DocumentPartiesReq' }, UpdateBooking: {$ref: '#/components/schemas/DocumentPartiesReq'} } },\n// 'BKG_v2.0.2' : { PARENTS: {Booking: { $ref: '#/components/schemas/DocumentParties' }, booking: { $ref: '#/components/schemas/DocumentParties' }, amendedBooking: { $ref: '#/components/schemas/DocumentParties' }, CreateBooking: { $ref: '#/components/schemas/DocumentPartiesReq' }, UpdateBooking: {$ref: '#/components/schemas/DocumentPartiesReq'} } },\n// 'BKG_v2.0.3' : { PARENTS: {Booking: { $ref: '#/components/schemas/DocumentParties' }, booking: { $ref: '#/components/schemas/DocumentParties' }, amendedBooking: { $ref: '#/components/schemas/DocumentParties' }, CreateBooking: { $ref: '#/components/schemas/DocumentPartiesReq' }, UpdateBooking: {$ref: '#/components/schemas/DocumentPartiesReq'} } },\n PARENTS : { CreateShippingInstructions: { $ref: '#/components/schemas/DocumentPartiesShippingInstructions' }, UpdateShippingInstructions: { $ref: '#/components/schemas/DocumentPartiesShippingInstructions' }, ShippingInstructions: { $ref: '#/components/schemas/DocumentPartiesShippingInstructions' }, TransportDocument: { }, HouseBillOfLading: { $ref: '#/components/schemas/DocumentPartiesHouseBL' } },\n DEFAULT : { $ref: '#/components/schemas/DocumentParties' },\n },\n DocumentParties: {\n 'BKG_v2.0.x' : { DEFAULT: { required: null, CHILDREN: ['bookingAgent','shipper','consignee','serviceContractOwner','carrierBookingOffice','issueTo','other'] } },\n// 'BKG_v2.0.1' : { DEFAULT: { required: null, CHILDREN: ['bookingAgent','shipper','consignee','serviceContractOwner','carrierBookingOffice','other'] } },\n// 'BKG_v2.0.2' : { DEFAULT: { required: null, CHILDREN: ['bookingAgent','shipper','consignee','serviceContractOwner','carrierBookingOffice','other'] } },\n// 'BKG_v2.0.3' : { DEFAULT: { required: null, CHILDREN: ['bookingAgent','shipper','consignee','serviceContractOwner','carrierBookingOffice','other'] } },\n DEFAULT : { type: 'object', title: 'Document Parties', required: ['shipper','issuingParty'], CHILDREN: ['shipper','onBehalfOfShipper','consignee','onBehalfOfConsignee','endorsee','issuingParty','carriersAgentAtDestination','notifyParties','other'] },\n },\n DocumentPartiesReq: {\n DEFAULT : { type: 'object', title: 'Document Parties (Shipper)', required: ['bookingAgent'], CHILDREN: ['bookingAgent','shipper','consignee','serviceContractOwner','carrierBookingOffice','issueTo','other'] },\n },\n DocumentPartiesHouseBL: {\n DEFAULT : { type: 'object', title: 'Document Parties (House B/L)', required: ['shipper'], CHILDREN: ['shipper','consignee','notifyParty','seller','buyer','other'] },\n },\n DocumentPartiesShippingInstructions: {\n DEFAULT : { type: 'object', title: 'Document Parties (Shipping Instructions)', required: ['shipper'], CHILDREN: ['shipper','onBehalfOfShipper','consignee','onBehalfOfConsignee','endorsee', 'issueTo', 'seller', 'buyer', 'notifyParties','shippingInstructionsRequestor','other'] },\n },\n draft: {\n DEFAULT : { type: 'number', format: 'float' },\n },\n duplicateOfAcceptedEnvelopeTransferChainEntrySignedContent: {\n DEFAULT : { type: 'string', pattern: '^[A-Za-z0-9_-]+\\\\.[A-Za-z0-9_-]+\\\\.[A-Za-z0-9_-]+$' },\n },\n EblEnvelope: {\n DEFAULT : { type: 'object', title: 'Ebl Envelope', required: ['transportDocument', 'envelopeManifestSignedContent','envelopeTransferChain'], CHILDREN: ['transportDocument', 'envelopeManifestSignedContent','envelopeTransferChain'] },\n },\n eblPlatform: {\n 'EBL_SUR_v3.0.x' : { PARENTS: { Shipper: {}, Consginee: {}, Endorsee: {}, RecipientParty: { pseudoEnum: ['WAVE','CARX','ESSD','IDT','BOLE','EDOX','IQAX','SECR','TRGO','ETEU','TRAC','BRIT','COVA','ETIT','KTNE','CRED','BLOC','DOCU','AEOT','SGTD', 'NONE'] }, ActorParty: { pseudoEnum: ['WAVE','CARX','ESSD','IDT','BOLE','EDOX','IQAX','SECR','TRGO','ETEU','TRAC','BRIT','COVA','ETIT','KTNE','CRED','BLOC','DOCU','AEOT','SGTD'] } } },\n DEFAULT : { type: 'string', maxLength: 4, pattern: '^\\\\S+$', pseudoEnum: EBL_PLATFORM_SOLUTION_PROVIDERS },\n },\n eBLVisualisationByCarrier: {\n PARENTS : { IssuanceRequest: {}, EnvelopeManifest: {} },\n DEFAULT : { $ref: '#/components/schemas/SupportingDocument' },\n },\n eBLVisualisationByCarrierChecksum: {\n DEFAULT : { type: 'string', pattern: '^[0-9a-f]+$', maxLength: 64, minLength: 64 },\n },\n email: {\n DEFAULT : { type: 'string', maxLength: 100, pattern: '^.+@\\\\S+$' },\n },\n EmergencyContactDetails: {\n DEFAULT : { type: 'object', title: 'Emergency Contact Details', required: ['contact', 'phone'], CHILDREN: ['contact','provider','phone','referenceNumber'] },\n },\n emergencyContactDetails: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { $ref: '#/components/schemas/EmergencyContactDetails' },\n },\n emptyContainerPickup: {\n DEFAULT : { $ref: '#/components/schemas/EmptyContainerPickup' },\n },\n EmptyContainerPickup: {\n 'BKG_v2.0.0' : { DEFAULT: { type: 'object', title: 'Empty Container Pickup', deprecated: null, CHILDREN: ['dateTime','depotReleaseLocation'] } },\n 'BKG_v2.0.1' : { DEFAULT: { type: 'object', title: 'Empty Container Pickup', deprecated: null, CHILDREN: ['dateTime','depotReleaseLocation'] } },\n DEFAULT : { type: 'object', title: 'Empty Container Pickup', deprecated: true, CHILDREN: ['dateTime','depotReleaseLocation'] },\n },\n originEmptyContainerPickup: {\n DEFAULT : { $ref: '#/components/schemas/OriginEmptyContainerPickup' },\n },\n OriginEmptyContainerPickup: {\n DEFAULT : { type: 'object', title: 'Origin Empty Container Pickup', CHILDREN: ['dateTime','depotReleaseLocation'] },\n },\n emptyContainerPickupDateTime: {\n DEFAULT : { type: 'string', format: 'date-time' },\n },\n emptyContainerDepotReleaseLocation: {\n DEFAULT : { $ref: '#/components/schemas/EmptyContainerDepotReleaseLocation' },\n },\n EmptyContainerDepotReleaseLocation: {\n DEFAULT : { type: 'object', title: 'Empty Container Depot Release Location', CHILDREN: ['locationName', 'facilityName', 'address','addressLines', 'facility','UNLocationCode','geoCoordinate' ] },\n },\n emptyContainerUnits: {\n DEFAULT : { $ref: '#/components/schemas/EmptyContainerUnits' }\n },\n EmptyContainerUnits: {\n DEFAULT : { type: 'object', title: 'Empty Container Units', oneOf:true },\n },\n emptyIndicatorCode: {\n DEFAULT : { type: 'string', enum: ['LADEN','EMPTY'] },\n },\n EMSNumber: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { type: 'string', maxLength: 7 },\n },\n endOfHoldingTime: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { type: 'string', format: 'date' },\n },\n endorsee: {\n PARENTS : { DocumentParties: {}, DocumentPartiesShippingInstructions: { $ref: '#/components/schemas/EndorseeShipper' } },\n DEFAULT : { $ref: '#/components/schemas/Endorsee' },\n },\n Endorsee: {\n DEFAULT : { type: 'object', title: 'Endorsee', required: ['partyName','identifyingCodes'], CHILDREN: ['partyName','eblPlatform','address','addressLines','displayedAddress','identifyingCodes','taxLegalReferences','partyContactDetails', 'isNotifyParty'] },\n },\n EndorseeShipper: {\n DEFAULT : { type: 'object', title: 'Endorsee (Shipper provided)', required: ['partyName'], CHILDREN: ['partyName','eblPlatform','address','addressLines','displayedAddress','identifyingCodes','taxLegalReferences','partyContactDetails', 'isNotifyParty'] },\n },\n endorsementChain: {\n DEFAULT : { type: 'array', items: { $ref: '#/components/schemas/EndorsementChainLink' } },\n },\n EndorsementChain: {\n DEFAULT : { type: 'object', title: 'Endorsement Chain', required: ['transportDocumentReference'], CHILDREN: ['transportDocumentReference', 'transportDocumentSubReference', 'carrierSCACCode', 'endorsementChain']},\n },\n EndorsementChainLink: {\n 'EBL_SUR_v3.0.x' : { DEFAULT: { required: ['actionDateTime', 'actionCode', 'actor', 'recipient'] } },\n DEFAULT : { type: 'object', title: 'Endorsement Chain Link', required: ['actionDateTime', 'actionCode', 'actor'], CHILDREN: ['actionDateTime', 'actionCode', 'actor', 'recipient','auditReference'] },\n },\n EnvelopeManifest: {\n DEFAULT : { type: 'object', title: 'Envelope Manifest', required: ['transportDocumentChecksum','lastEnvelopeTransferChainEntrySignedContentChecksum'], CHILDREN: ['transportDocumentChecksum','lastEnvelopeTransferChainEntrySignedContentChecksum','eBLVisualisationByCarrier','supportingDocuments'] },\n },\n envelopeManifestSignedContent: {\n DEFAULT : { $ref: '#/components/schemas/EnvelopeManifestSignedContent' },\n },\n EnvelopeManifestSignedContent: {\n DEFAULT : { type: 'string', pattern: '^[A-Za-z0-9_-]+\\\\.[A-Za-z0-9_-]+\\\\.[A-Za-z0-9_-]+$' },\n },\n envelopeReference: {\n DEFAULT : { type: 'string', maxLength: 100 },\n },\n envelopeTransferChain: {\n DEFAULT : { type: 'array', minItems: 1, items: { $ref: '#/components/schemas/EnvelopeTransferChainEntrySignedContent' } },\n },\n EnvelopeTransferChainEntry: {\n DEFAULT : { type: 'object', title: 'Envelope Transfer Chain Entry', required: ['eblPlatform','transportDocumentChecksum','transactions'], CHILDREN: ['eblPlatform','transportDocumentChecksum','previousEnvelopeTransferChainEntrySignedContentChecksum','issuanceManifestSignedContent','controlTrackingRegistry','transactions'] },\n },\n EnvelopeTransferChainEntrySignedContent: {\n DEFAULT : { type: 'string', pattern: '^[A-Za-z0-9_-]+\\\\.[A-Za-z0-9_-]+\\\\.[A-Za-z0-9_-]+$' },\n },\n EnvelopeTransferFinishedResponse: {\n DEFAULT : { type: 'object', title: 'Envelope Transfer Finished Response', required: ['lastEnvelopeTransferChainEntrySignedContentChecksum','responseCode'], CHILDREN: ['lastEnvelopeTransferChainEntrySignedContentChecksum','responseCode', 'duplicateOfAcceptedEnvelopeTransferChainEntrySignedContent', 'reason', 'missingAdditionalDocumentChecksums', 'receivedAdditionalDocumentChecksums'] },\n },\n EnvelopeTransferFinishedResponseSignedContent: {\n DEFAULT : { type: 'string', pattern: '^[A-Za-z0-9_-]+\\\\.[A-Za-z0-9_-]+\\\\.[A-Za-z0-9_-]+$' },\n },\n EnvelopeTransferStartedResponse: {\n DEFAULT : { type: 'object', title: 'Envelope Transfer Started Response', required: ['envelopeReference','transportDocumentChecksum','lastEnvelopeTransferChainEntrySignedContentChecksum','missingAdditionalDocumentChecksums'], CHILDREN: ['envelopeReference','transportDocumentChecksum','lastEnvelopeTransferChainEntrySignedContentChecksum','missingAdditionalDocumentChecksums'] },\n },\n equipment: {\n PARENTS : { UtilizedTransportEquipmentCarrier: { $ref: '#/components/schemas/Equipment' }, UTEquipment: { $ref: '#/components/schemas/RequiredEquipment' }, UtilizedTransportEquipment: { $ref: '#/components/schemas/Equipment' } },\n },\n Equipment: {\n DEFAULT : { type: 'object', title: 'Equipment', required: ['equipmentReference'], CHILDREN: ['equipmentReference','ISOEquipmentCode','tareWeight'] },\n },\n equipmentReference: {\n PARENTS : { UtilizedTransportEquipmentHBL: {}, CargoItem: {}, CargoItemShipper: {}, CargoItemHBL: {}, UTEquipmentReference: {}, Equipment: {}, RequiredEquipment: {} },\n DEFAULT : { type: 'string', maxLength: 11, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n equipmentReferences: {\n PARENTS : { RequestedEquipment: {}, RequestedEquipmentShipper: {}, CargoItemCarrier: {} },\n DEFAULT : { type: 'array', items: { type: 'string', maxLength: 11, pattern: '^\\\\S(?:.*\\\\S)?$' } },\n },\n errorDateTime: {\n PARENTS : { ErrorResponse: {} },\n DEFAULT : { type: 'string', format: 'date-time' },\n },\n errorCode: {\n PARENTS : { DetailedError: {}, errors: {}, IssuanceError: {type: 'string', maxLength: 50, pattern: '^\\\\S+$', format: null, minimum: null, maximum: null } },\n DEFAULT : { type: 'integer', format: 'int32', minimum: 7000, maximum: 9999 },\n },\n erorCodeMessage: {\n 'OVS_v3.0.x' : { DEFAULT: { type: 'string', maxLength: 200 }, PARENTS: { DetailedError: {}, errors: {} } }, \n },\n errorCodeMessage: {\n PARENTS : { DetailedError: {}, errors: {} },\n DEFAULT : { type: 'string', maxLength: 5000 },\n },\n errorCodeText: {\n PARENTS : { DetailedError: {}, errors: {} },\n DEFAULT : { type: 'string', maxLength: 100 },\n },\n ErrorResponse: {\n DEFAULT : { type: 'object', title: 'Error Response', required: ['httpMethod', 'requestUri', 'statusCode', 'statusCodeText','errorDateTime', 'errors'], CHILDREN: ['httpMethod','requestUri','statusCode','statusCodeText','statusCodeMessage','providerCorrelationReference','errorDateTime','errors'] },\n },\n errors: {\n 'OVS_v3.0.x' : { DEFAULT: { minItems: null } },\n PARENTS : { ErrorResponse: {}, IssuanceResponse: {minItems: null, maxItems: 255, items: {$ref: '#/components/schemas/IssuanceError'}} },\n DEFAULT : { type: 'array', minItems: 1, items: {$ref: '#/components/schemas/DetailedError'} },\n },\n estimatedDateTime: {\n DEFAULT : { type: 'string', format: 'date-time'}\n },\n estimatedEmptyContainerPickupDateTime: {\n DEFAULT : { type: 'string', format: 'date-time' },\n },\n eventDateTime: {\n PARENTS : { Timestamp: {} },\n DEFAULT : { type: 'string', format: 'date-time' },\n },\n eventTypeCode: {\n PARENTS : { TerminalTimestamp: {}, Timestamp: {} },\n DEFAULT : { type: 'string', enum: ['ARRI', 'DEPA'] },\n },\n eventClassifierCode: {\n PARENTS : { Timestamp: {} },\n DEFAULT : { type: 'string', enum: ['PLN', 'EST', 'ACT'] },\n },\n expectedArrivalAtPlaceOfDeliveryStartDate: {\n PARENTS : { CreateBooking: {}, UpdateBooking: {}, Booking: {} },\n DEFAULT : { type: 'string', format: 'date' },\n },\n expectedArrivalAtPlaceOfDeliveryEndDate: {\n PARENTS : { CreateBooking: {}, UpdateBooking: {}, Booking: {} },\n DEFAULT : { type: 'string', format: 'date' },\n },\n expectedDepartureDate: {\n PARENTS : { CreateBooking: {}, UpdateBooking: {}, Booking: {} },\n DEFAULT : { type: 'string', format: 'date' },\n },\n expectedDepartureFromPlaceOfReceiptDate: {\n PARENTS : { CreateBooking: {}, UpdateBooking: {}, Booking: {} },\n DEFAULT : { type: 'string', format: 'date' },\n },\n expiryDate: {\n PARENTS : { ExportLicense: {}, ImportLicense: {},ExportLicenseShipper: {}, ImportLicenseShipper: {} },\n DEFAULT : { type: 'string', format: 'date' },\n },\n exportDeclarationReference: {\n PARENTS : { CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {} },\n DEFAULT : { type: 'string', maxLength: 35, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n ExportLicense: {\n DEFAULT : { type: 'object', title: 'Export License', CHILDREN: ['isRequired', 'reference', 'issueDate', 'expiryDate'] },\n },\n ExportLicenseShipper: {\n DEFAULT : { type: 'object', title: 'Export License (Shipper)', CHILDREN: ['isRequired', 'reference', 'issueDate', 'expiryDate'] },\n },\n exportLicense: {\n PARENTS : { Commodity: {}, CommodityShipper: {}, TransportDocument: {}, CargoItem: {}, CargoItemShipper: { $ref: '#/components/schemas/ExportLicenseShipper' }, ConsignmentItem: {}, ConsignmentItemShipper: { $ref: '#/components/schemas/ExportLicenseShipper' }, CreateShippingInstructions: { $ref: '#/components/schemas/ExportLicenseShipper' }, UpdateShippingInstructions: { $ref: '#/components/schemas/ExportLicenseShipper' }, ShippingInstructions: { $ref: '#/components/schemas/ExportLicenseShipper' } },\n DEFAULT : { $ref: '#/components/schemas/ExportLicense' },\n },\n exportLicenseExpiryDate: {\n PARENTS : { CommodityShipper: {}, Commodity: {} },\n DEFAULT : { type: 'string', format: 'date' },\n },\n exportLicenseIssueDate: {\n PARENTS : { CommodityShipper: {}, Commodity: {} },\n DEFAULT : { type: 'string', format: 'date' },\n },\n extendedChargeName: {\n PARENTS : { Charge: {} },\n DEFAULT : { type: 'string', maxLength: 100, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n extendedContractQuotationReference: {\n PARENTS : { CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {}, TransportDocument: {}, transportDocument: {} },\n DEFAULT : { type: 'string', maxLength: 70, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n extendedHSCodes: {\n PARENTS : { CommodityShipper: {}, Commodity: {}, ConsignmentItem: {}, ConsignmentItemShipper: {} },\n DEFAULT : { type: 'array', items: { type: 'string', minLength: 6, maxLength: 12, pattern: '^\\\\d{6,12}$' } },\n },\n ExtendedNationalCommodityCode: {\n DEFAULT : { type: 'object', title: 'National Commodity Code (Extended)', required: ['type', 'values'], CHILDREN: ['type', 'countryCode', 'values'] },\n },\n extendedNationalCommodityCodes: {\n PARENTS : { Commodity: {}, CommodityShipper: {}, ConsignmentItem: {}, ConsignmentItemShipper: {}, CargoItem: {}, CargoItemShipper: {}, ConsignmentItemHBL: {} },\n DEFAULT : { type: 'array', items: {$ref: '#/components/schemas/ExtendedNationalCommodityCode'} },\n },\n Facility: {\n 'JIT_v2.0.0' : { DEFAULT: { CHILDREN: ['facilityCode','facilityCodeListProvider','subFacility'] } },\n DEFAULT : { type: 'object', title: 'Facility', required: ['facilityCode', 'facilityCodeListProvider'], CHILDREN: ['facilityCode','facilityCodeListProvider'] },\n },\n facility: {\n DEFAULT : { $ref: '#/components/schemas/Facility' },\n },\n facilityCode: {\n 'EBL_v3.0.0' : { DEFAULT: { nullable: 'false'} },\n PARENTS : { Facility: {} },\n DEFAULT : { type: 'string', maxLength: 6, pattern: '^\\\\S(?:.*\\\\S)?$', pseudoEnum: [] },\n },\n facilityName: {\n 'OVS_HUB_TER_v1.0.x' : { PARENTS: { location: {} } },\n PARENTS : { TransportCallLocation: {}, PortScheduleLocation: {}, Location: {}, PlaceOfReceipt: {}, PlaceOfDelivery: {}, OnwardInlandRouting: {}, ContainerPositioningLocation: {}, EmptyContainerDepotReleaseLocation: {}, LoadLocation: {}, DischargeLocation: {} },\n DEFAULT : { type: 'string', maxLength: 100 },\n },\n facilitySMDGCode: {\n 'OVS_HUB_TER_v1.0.x' : { PARENTS: { TerminalTimestamp: {}, location: {} } },\n PARENTS : { FacilitySMDGLocation: {}, TransportCallLocation: {}, PortScheduleLocation: {} },\n DEFAULT : { type: 'string', maxLength: 6 },\n },\n FacilitySMDGLocation: {\n DEFAULT : { type: 'object', title: 'Facility SMDG Location', required: ['UNLocationCode','facilitySMDGCode','locationType'] },\n },\n facilityTypeCode: {\n 'OVS_v3.0.x' : { DEFAULT: {pseudoEnum: ['PBPL', 'BRTH'], default: 'BRTH'}},\n 'CS_v1.0.x' : { DEFAULT: { pseudoEnum: ['BORD','CLOC','COFS','OFFD','DEPO','INTE','POTE','PBPL','BRTH','RAMP','WAYP'] } },\n// 'CS_v1.0.1' : { DEFAULT: { pseudoEnum: ['BORD','CLOC','COFS','OFFD','DEPO','INTE','POTE','PBPL','BRTH','RAMP','WAYP'] } },\n 'JIT_v2.0.0' : { DEFAULT: { enum: ['PBPL', 'BRTH', 'ANCH'], pseudoEnum: [] }}, // No validation added for description\n DEFAULT : { type: 'string', maxLength: 4},\n },\n facilityCodeListProvider: {\n PARENTS : { Facility: {} },\n DEFAULT : { type: 'string', enum: ['BIC', 'SMDG'] },\n },\n Feedback: {\n DEFAULT : { type: 'object', title: 'Feedback', required: ['severity', 'code', 'message'], CHILDREN: ['severity', 'code', 'message', 'jsonPath', 'property'] },\n },\n FeedbackElement: {\n DEFAULT : { type: 'object', title: 'Feedback Element', CHILDREN: ['severity', 'message', 'propertyPath'] },\n },\n feedbackElements: {\n DEFAULT : { type: 'array', items: { $ref: '#/components/schemas/FeedbackElement' } },\n },\n feedbacks: {\n PARENTS : { ShippingInstructionsData: {}, ShippingInstructions: {}, TransportDocument: {}, shippingInstructions: {}, updatedShippingInstructions: {}, ShippingInstructionsRefStatus: {}, ShippingInstructionsRefCancelStatus: {}, Booking: {}, booking: {}, amendedBooking: {}, BookingRefStatus: {}, BookingNotificationData: {}, TransportDocumentData: {} },\n DEFAULT : { type: 'array', items: { $ref: '#/components/schemas/Feedback' } },\n },\n flag: {\n PARENTS : { Vessel: {}, Barge: {} },\n DEFAULT : { type: 'string', maxLength: 2, minLength: 2, pattern: '^[A-Z]{2}$' },\n },\n flashPoint: {\n PARENTS : { Limits: {} },\n DEFAULT : { type: 'number', format: 'float' },\n },\n floor: {\n 'OVS_v3.0.x' : { DEFAULT: { pattern: null } },\n PARENTS : { Address: {}, address: {}, AddressHBL: {}, PartyAddress: {} },\n DEFAULT : { type: 'string', pattern: '^\\\\S(?:.*\\\\S)?$', maxLength: 50 },\n },\n footprint: {\n DEFAULT : { type: 'object', CHILDREN: ['co2','co2e','sox','nox','pm10'] }\n },\n forwardDraft: {\n DEFAULT : { type: 'number', format: 'float' },\n },\n freeText: {\n PARENTS : { InvoicePayableAt: {} },\n DEFAULT : { type: 'string', maxLength: 35 }, // In TD invoicePayableAt\n },\n freightPaymentTermCode: {\n PARENTS : { CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {}, CreateShippingInstructions: {}, UpdateShippingInstructions: {}, ShippingInstructions: {}, updatedShippingInstructions: {}, shippingInstructions: {}, TransportDocument: {}, transportDocument: {} },\n DEFAULT : { type: 'string', enum: ['PRE', 'COL'] },\n },\n fullContainerPickupDateTime: {\n DEFAULT : { type: 'string', format: 'date-time' },\n },\n fumigationDateTime: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { type: 'string', format: 'date-time' },\n },\n GeoCoordinate: {\n DEFAULT : { type: 'object', title: 'Geo Coordinate', required: ['latitude', 'longitude'], CHILDREN: ['latitude', 'longitude'] },\n },\n geoCoordinate: {\n DEFAULT : { $ref: '#/components/schemas/GeoCoordinate' },\n },\n grossWeight: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { $ref: '#/components/schemas/GrossWeight' },\n },\n GrossWeight: {\n DEFAULT : { type: 'object', title: 'Gross Weight', required: ['value','unit'], CHILDREN: ['value','unit'] },\n },\n haulageChargesPaymentTermCode: {\n PARENTS : { OriginChargesPaymentTerm: {}, DestinationChargesPaymentTerm: {} },\n DEFAULT : { type: 'string', enum: ['PRE', 'COL'] },\n },\n HouseBillOfLading: {\n DEFAULT : { type: 'object', title: 'House Bill of Lading', required: ['houseBillOfLadingReference','isToOrder','methodOfPayment','documentParties','isCargoDeliveredInICS2Zone','routingOfConsignmentCountries','consignmentItems','utilizedTransportEquipments'], CHILDREN: ['houseBillOfLadingReference','isToOrder','placeOfAcceptance','placeOfFinalDelivery','methodOfPayment','documentParties','isCargoDeliveredInICS2Zone','routingOfConsignmentCountries','consignmentItems','utilizedTransportEquipments'] },\n },\n houseBillOfLadingReference: {\n DEFAULT : { type: 'string', maxLength: 20, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n houseBillOfLadings: {\n DEFAULT : { type: 'array', items: {$ref: '#/components/schemas/HouseBillOfLading'} },\n },\n HSCodes: {\n PARENTS : { CommodityShipper: {}, Commodity: {}, ConsignmentItem: { minItems: 1 }, ConsignmentItemShipper: {minItems: 1} },\n DEFAULT : { type: 'array', deprecated: true, items: { type: 'string', minLength: 6, maxLength: 10, pattern: '^\\\\d{6,10}$' } },\n },\n httpMethod: {\n 'OVS_v3.0.x' : { DEFAULT: { enum: ['GET', 'HEAD', 'POST', 'PUT', 'DELETE', 'OPTION', 'PATCH'] } },\n 'EBL_SUR_v3.0.x' : { DEFAULT: { enum: ['GET', 'HEAD', 'POST', 'PUT', 'DELETE', 'OPTION', 'PATCH'] } },\n 'EBL_ISS_v3.0.x' : { DEFAULT: { enum: ['GET', 'HEAD', 'POST', 'PUT', 'DELETE', 'OPTION', 'PATCH'] } },\n 'EBL_v3.0.x' : { DEFAULT: { enum: ['GET', 'HEAD', 'POST', 'PUT', 'DELETE', 'OPTION', 'PATCH'] } },\n 'BKG_v2.0.x' : { DEFAULT: { enum: ['GET', 'HEAD', 'POST', 'PUT', 'DELETE', 'OPTION', 'PATCH'] } },\n 'CS_v1.0.x' : { DEFAULT: { enum: ['GET', 'HEAD', 'POST', 'PUT', 'DELETE', 'OPTION', 'PATCH'] } },\n PARENTS : { ErrorResponse: {} },\n DEFAULT : { type: 'string', enum: ['GET', 'HEAD', 'POST', 'PUT', 'DELETE', 'OPTIONS', 'PATCH'], pseudoEnum: [] },\n },\n humiditySetpoint: {\n PARENTS : { ActiveReeferSettings: {} },\n DEFAULT : { type: 'number', format: 'float', minimum: '0', maximum: 100 },\n },\n id: {\n PARENTS : DCSA_CLOUDEVENT_GROUP,\n DEFAULT : { type: 'string', maxLength: 100},\n },\n IdentifyingCode: {\n DEFAULT : { type: 'object', title: 'Identifying Code', required: ['codeListProvider', 'partyCode'], CHILDREN: ['codeListProvider','partyCode','codeListName'] },\n },\n identifyingCodes: {\n 'BKG_v2.0.x' : { PARENTS: { BookingAgent: { minItems: null }, Shipper: { minItems: null }, Consignee: { minItems: null }, ServiceContractOwner: { minItems: null }, CarrierBookingOffice: { minItems: null }, IssueToParty: { minItems: null }, Party: { minItems: null } } },\n PARENTS : { BookingAgent: { minItems: null }, Shipper: { minItems: null }, ShipperShipper: { minItems: null }, OnBehalfOfShipper: { minItems: null }, OnBehalfOfShipperShipper: { minItems: null }, ShipperHBL: { minItems: null }, Consignee: {}, OnBehalfOfConsignee: {}, OnBehalfOfConsigneeShipper: {}, ConsigneeShipper: { minItems: null }, ConsigneeHBL: { minItems: null }, Endorsee: {}, EndorseeShipper: { minItems: null }, ServiceContractOwner: { minItems: null }, CarrierBookingOffice: { minItems: null }, Party: { minItems: null }, PartyShipper: { minItems: null }, PartyHBL: { minItems: null }, IssuingParty: { minItems: null }, IssueToParty: {}, ActorParty: {}, RecipientParty: {}, SurrenderRequestedBy: { minItems: null }, NotifyParty: { minItems: null }, NotifyPartyShipper: { minItems: null }, NotifyPartyHBL: { minItems: null }, Seller: { minItems: null }, SellerHBL: { minItems: null }, Buyer: { minItems: null }, BuyerHBL: { minItems: null }, ShippingInstructionsRequestor: { minItems: null }, RepresentedActorParty: { minItems: null }, RepresentedRecipientParty: { minItems: null } },\n DEFAULT : { type: 'array', minItems: 1, items: {$ref: '#/components/schemas/IdentifyingCode'} },\n },\n imoClass: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { type: 'string', maxLength: 4, pseudoEnum: ['1.1A','1.6N','2.1','8'] },\n },\n imoPackagingCode: {\n PARENTS : { OuterPackaging: {}, OuterPackagingCarrier: {} },\n DEFAULT : { type: 'string', minLength: 1, maxLength: 5, pattern: '^[A-Z0-9]{1,5}$' },\n },\n ImportLicense : {\n DEFAULT : { type: 'object', title: 'Import License', CHILDREN: ['isRequired', 'reference', 'issueDate', 'expiryDate'] },\n },\n ImportLicenseShipper : {\n DEFAULT : { type: 'object', title: 'Import License (Shipper)', CHILDREN: ['isRequired', 'reference', 'issueDate', 'expiryDate'] },\n },\n importLicense : {\n PARENTS : { Commodity: {}, CommodityShipper: {}, TransportDocument: {}, CargoItem: {}, CargoItemShipper: { $ref: '#/components/schemas/ImportLicenseShipper' }, ConsignmentItem: {}, ConsignmentItemShipper: { $ref: '#/components/schemas/ImportLicenseShipper' }, CreateShippingInstructions: { $ref: '#/components/schemas/ImportLicenseShipper' }, UpdateShippingInstructions: { $ref: '#/components/schemas/ImportLicenseShipper' }, ShippingInstructions: { $ref: '#/components/schemas/ImportLicenseShipper' } },\n DEFAULT : { $ref: '#/components/schemas/ImportLicense' },\n },\n incoTerms: {\n PARENTS : { CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {} },\n DEFAULT : { type: 'string', maxLength: 3 },\n },\n inhalationZone: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { type: 'string', minLength: 1, maxLength: 1, pseudoEnum: ['A','B','C','D'] },\n },\n InnerPackaging: {\n DEFAULT : { type: 'object', title: 'Inner Packaging', required: ['quantity', 'material', 'description'], CHILDREN: ['quantity','material','description', 'innerPackagings'] },\n },\n innerPackagings: {\n PARENTS : { DangerousGoods: {}, InnerPackaging: {} },\n DEFAULT : { type: 'array', items: { $ref: '#/components/schemas/InnerPackaging' } },\n },\n IntermediateCall: {\n DEFAULT : { type: 'object', title: 'Intermediate Call', required: ['location'], CHILDREN: ['transportCallReference','facilityTypeCode','location','arrivalDateTime','departureDateTime'] },\n },\n intermediateCalls: {\n PARENTS : { Leg: {} },\n DEFAULT : { type: 'array', items: { $ref: '#/components/schemas/IntermediateCall' } },\n },\n InvoicePayableAt: {\n 'BKG_v2.0.x' : { DEFAULT: { type: 'object', title: 'Invoice Payable At', required: ['UNLocationCode'], CHILDREN: ['UNLocationCode'] } },\n// 'BKG_v2.0.1' : { DEFAULT: { type: 'object', title: 'Invoice Payable At', required: ['UNLocationCode'], CHILDREN: ['UNLocationCode'] } },\n// 'BKG_v2.0.2' : { DEFAULT: { type: 'object', title: 'Invoice Payable At', required: ['UNLocationCode'], CHILDREN: ['UNLocationCode'] } },\n DEFAULT : { type: 'object', title: 'Invoice Payable At', CHILDREN: ['UNLocationCode','freeText'] },\n },\n InvoicePayableAtShippingInstructions: {\n DEFAULT : { type: 'object', title: 'Invoice Payable At (Shipping Instructions)', required: ['UNLocationCode'], CHILDREN: ['UNLocationCode'] },\n },\n invoicePayableAt: {\n PARENTS : { CreateBooking: { $ref: '#/components/schemas/InvoicePayableAt' }, UpdateBooking: { $ref: '#/components/schemas/InvoicePayableAt' }, Booking: { $ref: '#/components/schemas/InvoicePayableAt' }, CreateShippingInstructions: { $ref: '#/components/schemas/InvoicePayableAtShippingInstructions' }, UpdateShippingInstructions: { $ref: '#/components/schemas/InvoicePayableAtShippingInstructions' }, ShippingInstructions: { $ref: '#/components/schemas/InvoicePayableAtShippingInstructions' }, TransportDocument: { }},\n DEFAULT : { $ref: '#/components/schemas/InvoicePayableAt' },\n },\n \n isBulbMode: {\n PARENTS : { ActiveReeferSettings: {} },\n DEFAULT : { type: 'boolean' },\n },\n isCarriersAgentAtDestinationRequired: {\n PARENTS : { CreateShippingInstructions: {}, UpdateShippingInstructions: {}, ShippingInstructions: {}, updatedShippingInstructions: {}, shippingInstructions: {} },\n DEFAULT : { type: 'boolean' },\n },\n isColdTreatmentRequired: {\n PARENTS : { ActiveReeferSettings: {} },\n DEFAULT : { type: 'boolean' },\n },\n isCompetentAuthorityApprovalRequired: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { type: 'boolean' },\n },\n isControlledAtmosphereRequired: {\n PARENTS : { ActiveReeferSettings: {} },\n DEFAULT : { type: 'boolean' },\n },\n isCargoDeliveredInICS2Zone: {\n PARENTS : { CreateShippingInstructions: {}, UpdateShippingInstructions: {}, ShippingInstructions: {}, HouseBillOfLading: {} },\n DEFAULT : { type: 'boolean' },\n },\n isDrainholesOpen: {\n PARENTS : { ActiveReeferSettings: {} },\n DEFAULT : { type: 'boolean' },\n },\n isDummyVessel: {\n PARENTS : { Schedule: {}, VesselVoyage: {}, VesselSchedule: {} },\n DEFAULT : { type: 'boolean' },\n },\n isElectronic: {\n PARENTS : { CreateShippingInstructions: {}, UpdateShippingInstructions: {}, ShippingInstructions: {}, TransportDocument: {} },\n DEFAULT : { type: 'boolean' },\n },\n isEmptyUncleanedResidue: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { type: 'boolean' },\n },\n isEquipmentSubstitutionAllowed: {\n PARENTS : { CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {} },\n DEFAULT : { type: 'boolean' },\n },\n isExceptedQuantity: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { type: 'boolean' },\n },\n isExportDeclarationRequired: {\n PARENTS : { CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {} },\n DEFAULT : { type: 'boolean' },\n },\n isFYI: {\n PARENTS : { Cancel: { writeOnly: null }, Decline: { writeOnly: null }, Omit: { writeOnly: null }, PortCall: {}, TerminalCall: {}, PortCallService: {}, Timestamp: {}, VesselStatus: {}, OmitPortCall: { writeOnly: null }, OmitTerminalCall: { writeOnly: null } },\n DEFAULT : { type: 'boolean', writeOnly: 'true', default: 'false' },\n },\n isGeneratorSetRequired: {\n PARENTS : { ActiveReeferSettings: {} },\n DEFAULT : { type: 'boolean' },\n },\n isHouseBillOfLadingsIssued: {\n PARENTS : { CreateShippingInstructions: {}, UpdateShippingInstructions: {}, ShippingInstructions: {} },\n DEFAULT : { type: 'boolean' },\n },\n isHot: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { type: 'boolean' },\n },\n isLimitedQuantity: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { type: 'boolean' },\n },\n isMarinePollutant: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { type: 'boolean' },\n },\n isNonOperatingReefer: {\n PARENTS : { RequestedEquipment: {}, RequestedEquipmentShipper: {}, UtilizedTransportEquipmentCarrier: {}, UtilizedTransportEquipment: {} },\n DEFAULT : { type: 'boolean' },\n },\n isNotifyParty: {\n PARENTS : { Consignee: {}, ConsigneeShipper: {}, Endorsee: {}, EndorseeShipper: {} },\n DEFAULT : { type: 'boolean' },\n },\n ISOEquipmentCode: {\n PARENTS : { UtilizedTransportEquipmentHBL: {}, ConfirmedEquipment: {}, RequestedEquipment: {}, RequestedEquipmentShipper: {}, Equipment: {}, RequiredEquipment: {} },\n DEFAULT : { type: 'string', maxLength: 4, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n isPartialLoadAllowed: {\n PARENTS : { CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {} },\n DEFAULT : { type: 'boolean' },\n },\n isPreCoolingRequired: {\n PARENTS : { ActiveReeferSettings: {} },\n DEFAULT : { type: 'boolean' },\n },\n isReportableQuantity: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { type: 'boolean' },\n },\n isRequired: {\n DEFAULT : { type: 'boolean' },\n },\n isSalvagePackings: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { type: 'boolean' },\n },\n isShippedOnBoardType: {\n PARENTS : { CreateShippingInstructions: {}, UpdateShippingInstructions: {}, ShippingInstructions: {}, updatedShippingInstructions: {}, shippingInstructions: {}, TransportDocument: {}, transportDocument: {} },\n DEFAULT : { type: 'boolean' },\n },\n isShipperOwned: {\n PARENTS : { RequestedEquipment: {}, RequestedEquipmentShipper: {}, UtilizedTransportEquipmentHBL: {}, UTEquipment: {}, UTEquipmentReference: {}, UtilizedTransportEquipment: {} },\n DEFAULT : { type: 'boolean' },\n },\n IssuanceError: {\n DEFAULT : { type: 'object', title: 'Issuance Error', CHILDREN: ['reason', 'errorCode'] },\n },\n IssuanceManifest: {\n DEFAULT : { type: 'object', title: 'Issuance Manifest', required: ['documentChecksum', 'issueToChecksum'], CHILDREN: ['documentChecksum', 'eBLVisualisationByCarrierChecksum', 'issueToChecksum'] },\n },\n issuanceManifestSignedContent: {\n DEFAULT : { type: 'string', pattern: '^[A-Za-z0-9_-]+\\\\.[A-Za-z0-9_-]+\\\\.[A-Za-z0-9_-]+$' },\n },\n IssuanceRequest: {\n DEFAULT : { type: 'object', title: 'Issuance Request', required: ['document', 'issueTo', 'issuanceManifestSignedContent'] },\n },\n IssuanceResponse: {\n DEFAULT : { type: 'object', title: 'Issuance Response', required: ['transportDocumentReference', 'issuanceResponseCode'], CHILDREN: ['transportDocumentReference','transportDocumentSubReference', 'issuanceResponseCode', 'reason', 'errors'] },\n },\n issuanceResponseCode: {\n DEFAULT : { type: 'string', enum: ['ISSU','BREQ', 'REFU'] },\n },\n issueDate: {\n PARENTS : { TransportDocument: {}, transportDocument: {}, ExportLicense: {}, ImportLicense: {}, ExportLicenseShipper: {}, ImportLicenseShipper: {} },\n DEFAULT : { type: 'string', format: 'date' },\n },\n issueTo: {\n PARENTS : { IssuanceRequest: {}, DocumentParties: {}, DocumentPartiesShippingInstructions: {}, DocumentPartiesReq: {} },\n DEFAULT : { $ref: '#/components/schemas/IssueToParty' },\n },\n issueToChecksum: {\n DEFAULT : { type: 'string', pattern: '^[0-9a-f]+$', maxLength: 64, minLength: 64 },\n },\n\n IssueToParty: {\n 'BKG_v2.0.x' : { DEFAULT: { required: ['partyName'] } },\n 'EBL_ISS_v3.0.x' : { DEFAULT: { required: ['partyName', 'sendToPlatform', 'identifyingCodes'] } },\n// 'EBL_ISS_v3.0.1' : { DEFAULT: { required: ['partyName', 'sendToPlatform', 'identifyingCodes'] } },\n DEFAULT : { type: 'object', title: 'Issue To Party', required: ['partyName', 'identifyingCodes'], CHILDREN: ['partyName', 'sendToPlatform', 'identifyingCodes', 'taxLegalReferences'] },\n },\n issuingParty: {\n PARENTS : { DocumentParties: {} },\n DEFAULT : { $ref: '#/components/schemas/IssuingParty' },\n },\n IssuingParty: {\n DEFAULT : { type: 'object', title: 'Issuing Party', required: ['partyName', 'address'], CHILDREN: ['partyName','address','addressLines','identifyingCodes','taxLegalReferences','partyContactDetails'] },\n },\n isToOrder: {\n PARENTS : { CreateShippingInstructions: {}, UpdateShippingInstructions: {}, ShippingInstructions: {}, updatedShippingInstructions: {}, shippingInstructions: {}, TransportDocument: {}, transportDocument: {}, HouseBillOfLading: {} },\n DEFAULT : { type: 'boolean' },\n },\n isVentilationOpen: {\n PARENTS : { ActiveReeferSettings: {} },\n DEFAULT : { type: 'boolean' },\n },\n isWaste: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { type: 'boolean' },\n },\n jsonPath: {\n PARENTS : { Feedback: {}, DetailedError: {} },\n DEFAULT : { type: 'string', maxLength: 500 },\n },\n ladenContainerUnits: {\n DEFAULT : { $ref: '#/components/schemas/LadenContainerUnits' }\n },\n LadenContainerUnits: {\n DEFAULT : { type: 'object', title: 'Laden Container Units', oneOf:true },\n },\n lastEnvelopeTransferChainEntrySignedContentChecksum: {\n DEFAULT : { type: 'string', minLength: 64, maxLength: 64, pattern: '^[0-9a-f]+$' },\n },\n latitude: {\n PARENTS : { GeoCoordinate: {} },\n DEFAULT : { type: 'string', maxLength: 10 },\n },\n Leg: {\n DEFAULT : { type: 'object', title: 'Leg', required: ['departure', 'arrival'], CHILDREN: ['sequenceNumber', 'transport', 'departure', 'intermediateCalls', 'arrival','footprint','cutOffTimes'] },\n },\n legs: {\n PARENTS : { PointToPoint: {} },\n DEFAULT : { type: 'array', minItems: 1, items: {$ref: '#/components/schemas/Leg'} },\n },\n lengthOverall: {\n DEFAULT : { type: 'number', format: 'float' },\n },\n Limits: {\n DEFAULT : { type: 'object', title: 'Limits', required: ['temperatureUnit'], CHILDREN: ['temperatureUnit','flashPoint','transportControlTemperature','transportEmergencyTemperature','SADT','SAPT'] },\n },\n limits: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { $ref: '#/components/schemas/Limits' },\n },\n loadLocation: {\n PARENTS : { Transport: {$ref:'#/components/schemas/LoadLocation' } },\n },\n LoadLocation: {\n DEFAULT : { type: 'object', title: 'Load Location', CHILDREN: ['locationName', 'facilityName', 'address','addressLines', 'facility', 'UNLocationCode' ] },\n },\n loadUnits: {\n DEFAULT : { $ref: '#/components/schemas/LoadUnits' }\n },\n LoadUnits: {\n DEFAULT : { type: 'object', title: 'Load Units', CHILDREN: ['ladenContainerUnits','emptyContainerUnits','reeferPluggedContainerUnits','oogUnits'] },\n },\n location: {\n 'OVS_HUB_TER_v1.0.x' : { DEFAULT: { type: 'object', title: 'Location' }, PARENTS: { TransportCall: {} } },\n 'OVS_v3.0.x' : { PARENTS: { TransportCall: {} } },\n 'CS_v1.0.x' : { PARENTS: { IntermediateCall: { $ref: '#/components/schemas/Location' }, PlaceOfReceipt: { $ref: '#/components/schemas/Location' }, TransportCall: { $ref: '#/components/schemas/TransportCallLocation' }, PortSchedule: { $ref: '#/components/schemas/PortScheduleLocation' }, PlaceOfDelivery: { $ref: '#/components/schemas/Location' }, PlaceOfArrival: { $ref: '#/components/schemas/Location' }, PlaceOfDeparture: { $ref: '#/components/schemas/Location' } } },\n PARENTS : { ShipmentLocation: {}, ContainerPositioning: {$ref: '#/components/schemas/ContainerPositioningLocation'}, ContainerPositioningEstimated: {$ref: '#/components/schemas/ContainerPositioningLocation'} },\n DEFAULT : { $ref: '#/components/schemas/Location' },\n },\n Location: {\n 'CS_v1.0.x' : { DEFAULT: { type: 'object', title: 'Location', CHILDREN: ['locationName','facilityName','address','addressLines','UNLocationCode','facility'] } },\n DEFAULT : { type: 'object', title: 'Location', CHILDREN: ['locationName','facilityName','address','addressLines','facility','UNLocationCode','geoCoordinate'] },\n },\n locationName: {\n 'OVS_HUB_TER_v1.0.x' : { PARENTS: { location: {} } },\n 'OVS_v3.0.x' : { PARENTS: { AddressLocation: { pattern: null }, FacilitySMDGLocation: { pattern: null }, UNLocationLocation: { pattern: '^\\\\S+(\\\\s+\\\\S+)*$' } } },\n PARENTS : { PortScheduleLocation: {}, TransportCallLocation:{}, VesselPosition: {}, PortCallServiceLocation: {}, PortCallServiceLocationTimestamp: {}, PlaceOfAcceptance: { maxLength: 35}, PlaceOfFinalDelivery: { maxLength: 35}, PlaceOfReceipt: {}, PortOfLoading: {}, PlaceOfDelivery: {}, PortOfDischarge: {}, OnwardInlandRouting:{}, PlaceOfIssue: {}, PlaceOfBLIssue: {}, Location: {}, ContainerPositioningLocation: {}, EmptyContainerDepotReleaseLocation: {}, LoadLocation: {}, DischargeLocation: {} },\n DEFAULT : { type: 'string', maxLength: 100, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n locationType: {\n 'OVS_v3.0.x' : { DEFAULT: { type: 'string', maxLength: 4 }, PARENTS: { AddressLocation: {}, FacilitySMDGLocation: {}, UNLocationLocation: {} } },\n// PARENTS : { AddressLocation: {}, FacilitySMDGLocation: {}, UNLocationLocation: {} },\n// PARENTS : { AddressLocation: {}, CityLocation: {}, Facility: {}, UNLocationLocation: {}, FacilitySMDGLocation: {} },\n// DEFAULT : { type: 'string', maxLength: 4 },\n },\n locationTypeCode: {\n PARENTS : { ShipmentLocation: {} },\n DEFAULT : { type: 'string', maxLength: 3, pseudoEnum: ['PRE','POL','POD','PDE','PCF','OIR','ORI','IEL','PTP','RTP','FCD','ROU'] },\n },\n longitude: {\n PARENTS : { GeoCoordinate: {} },\n DEFAULT : { type: 'string', maxLength: 11 },\n },\n manifestTypeCode: {\n PARENTS : { AdvanceManifestFiling: {} },\n DEFAULT : { type: 'string', maxLength: 50, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n material: {\n PARENTS : { InnerPackaging: {} },\n DEFAULT : { type: 'string', maxLength: 100 },\n },\n mediaType: {\n DEFAULT : { type: 'string', maxLength:100 },\n },\n message: {\n PARENTS : { Feedback: {}, FeedbackElement: {} },\n DEFAULT : { type: 'string', maxLength: 5000 },\n },\n methodOfPayment: {\n DEFAULT : { type: 'string', maxLength: 1, pseudoEnum: ['A','B','C','D','H','Y','Z'] },\n },\n milesToDestinationPort: {\n DEFAULT : { type: 'number', format: 'float' }\n },\n missingAdditionalDocumentChecksums: {\n PARENTS : { EnvelopeTransferFinishedResponse: { minItems: null}, EnvelopeTransferStartedResponse: {} },\n DEFAULT : { type: 'array', minItems: 1, items: { $ref: '#/components/schemas/DocumentChecksum' } },\n },\n MMSINumber: {\n DEFAULT : { type: 'string', minLength: 9, maxLength: 9, pattern: '^\\\\d{9}$' },\n },\n modeOfTransport: {\n 'BKG_v2.0.0' : { DEFAULT: { type: 'string', maxLength: 50, pseudoEnum: ['VESSEL','RAIL','TRUCK','BARGE','MULTIMODAL'] } },\n 'BKG_v2.0.1' : { DEFAULT: { type: 'string', maxLength: 50, pseudoEnum: ['VESSEL','RAIL','TRUCK','BARGE','MULTIMODAL'] } },\n PARENTS : { Transport: { pseudoEnum: ['VESSEL','RAIL','TRUCK','BARGE','RAIL_TRUCK', 'BARGE_RAIL', 'BARGE_TRUCK','MULTIMODAL'] }, VesselTransport: { maxLength: null, enum: ['VESSEL'], pseudoEnum: [] }, BargeTransport: { maxLength: null, enum: ['BARGE'], pseudoEnum: []}, OtherTransport: { maxLength: null, enum: ['RAIL_TRUCK', 'BARGE_TRUCK', 'BARGE_RAIL', 'MULTIMODAL', 'RAIL', 'TRUCK'] } },\n DEFAULT : { type: 'string', maxLength: 50 },\n },\n moves: {\n DEFAULT : { $ref: '#/components/schemas/MovesList' }\n },\n Moves: {\n DEFAULT : { type: 'object', title: 'Moves', CHILDREN: ['carrierCode','carrierCodeListProvider','restows'], oneOf: true },\n },\n MovesList: {\n DEFAULT : { type: 'array', items: {$ref: '#/components/schemas/Moves'} },\n },\n name: {\n 'OVS_v3.0.x' : { DEFAULT: { maxLength: 100, pattern: null }, PARENTS: { address: {} } },\n PARENTS : { DocumentMetadata: {}, Vessel: { maxLength: 50 }, Barge: { maxLength: 50 }, SupportingDocument: {maxLength: 100, pattern: null }, vessel: { maxLength: 50 }, PartyContactDetail: { maxLength: 35 }, PartyContactDetailHBL: { maxLength: 35 }, PartyContactDetailWithPattern: { maxLength: 35 } },\n DEFAULT : { type: 'string', pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n NANumber: {\n DEFAULT : { type: 'string', minLength: 4, maxLength: 4, pattern: '^\\\\d{4}$' },\n },\n NationalCommodityCode: {\n DEFAULT : { type: 'object', title: 'National Commodity Code', deprecated: true, required: ['type', 'values'], CHILDREN: ['type', 'countryCode', 'values'] },\n },\n nationalCommodityCode: {\n PARENTS : { ConsignmentItemHBL: {} },\n DEFAULT : { $ref: '#/components/schemas/NationalCommodityCode' },\n },\n nationalCommodityCodes: {\n PARENTS : { Commodity: {}, CommodityShipper: {}, ConsignmentItem: {}, ConsignmentItemShipper: {}, CargoItem: {}, CargoItemShipper: {} },\n DEFAULT : { type: 'array', deprecated: true, items: {$ref: '#/components/schemas/NationalCommodityCode'} },\n },\n netExplosiveContent: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { $ref: '#/components/schemas/NetExplosiveContent' },\n },\n NetExplosiveContent: {\n DEFAULT : { type: 'object', title: 'Net Explosive Content', required: ['value', 'unit'], CHILDREN: ['value','unit'] },\n },\n netWeight: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { $ref: '#/components/schemas/NetWeight' },\n },\n NetWeight: {\n DEFAULT : { type: 'object', title: 'Net Weight', required: ['value', 'unit'], CHILDREN: ['value','unit'] },\n },\n netVolume: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { $ref: '#/components/schemas/NetVolume' },\n },\n NetVolume: {\n DEFAULT : { type: 'object', title: 'Net Volume', required: ['value', 'unit'], CHILDREN: ['value','unit'] },\n },\n newTransportDocumentReferences: {\n DEFAULT : { type: 'array', items: { $ref: '#/components/schemas/TransportDocumentRelation' } },\n },\n nox: {\n PARENTS : { footprint: {}, solutionFootprint: {} },\n DEFAULT : { type: 'number', format: 'double' },\n },\n notifyParties: {\n PARENTS : { DocumentParties: {}, DocumentPartiesShippingInstructions: { items: { $ref: '#/components/schemas/NotifyPartyShipper' } } },\n DEFAULT : { type: 'array', maxItems: 3, items: { $ref: '#/components/schemas/NotifyParty' } },\n },\n notifyParty: {\n PARENTS : { DocumentPartiesHouseBL: {} },\n DEFAULT : { $ref: '#/components/schemas/NotifyPartyHBL' },\n },\n NotifyParty: {\n DEFAULT : { type: 'object', title: 'Notify Party', required: ['partyName'], CHILDREN: ['partyName','typeOfPerson','address','addressLines','displayedAddress','identifyingCodes','taxLegalReferences','partyContactDetails', 'reference'] },\n },\n NotifyPartyShipper: {\n DEFAULT : { basedOn: 'NotifyParty', title: 'Notify Party (Shipper provided)' },\n },\n NotifyPartyHBL: {\n DEFAULT : { type: 'object', title: 'Notify Party (House B/L)', required: ['partyName','partyContactDetails', 'typeOfPerson'], CHILDREN: ['partyName','typeOfPerson','address','identifyingCodes','taxLegalReferences','partyContactDetails'] },\n },\n number: {\n PARENTS : { Seal: {} },\n DEFAULT : { type: 'string', maxLength: 15 },\n },\n numberOfCopiesWithCharges: {\n PARENTS : { CreateShippingInstructions: {}, UpdateShippingInstructions: {}, ShippingInstructions: {}, updatedShippingInstructions: {}, shippingInstructions: {}, TransportDocument: {}, transportDocument: {} },\n DEFAULT : { type: 'integer', format: 'int32', minimum: '0' },\n },\n numberOfCopiesWithoutCharges: {\n PARENTS : { CreateShippingInstructions: {}, UpdateShippingInstructions: {}, ShippingInstructions: {}, updatedShippingInstructions: {}, shippingInstructions: {}, TransportDocument: {}, transportDocument: {} },\n DEFAULT : { type: 'integer', format: 'int32', minimum: '0' },\n },\n numberOfOriginalsWithCharges: {\n PARENTS : { CreateShippingInstructions: {}, UpdateShippingInstructions: {}, ShippingInstructions: {}, updatedShippingInstructions: {}, shippingInstructions: {}, TransportDocument: {}, transportDocument: {} },\n DEFAULT : { type: 'integer', format: 'int32', minimum: '0' },\n },\n numberOfOriginalsWithoutCharges: {\n PARENTS : { CreateShippingInstructions: {}, UpdateShippingInstructions: {}, ShippingInstructions: {}, updatedShippingInstructions: {}, shippingInstructions: {}, TransportDocument: {}, transportDocument: {} },\n DEFAULT : { type: 'integer', format: 'int32', minimum: '0' },\n },\n numberOfPackages: {\n PARENTS : { OuterPackaging: {}, OuterPackagingShipper: {}, OuterPackagingHBL: {} },\n DEFAULT : { type: 'integer', format: 'int32', minimum: 1, maximum: 99999999 },\n },\n numberOfRiderPages: {\n PARENTS : { TransportDocument: {}, transportDocument: {} },\n DEFAULT : { type: 'integer', format: 'int32', minimum: '0' },\n },\n o2Setpoint: {\n PARENTS : { ActiveReeferSettings: {} },\n DEFAULT : { type: 'number', format: 'float', minimum: '0', maximum: 100 },\n },\n oldTransportDocumentReferences: {\n DEFAULT : { type: 'array', items: { $ref: '#/components/schemas/TransportDocumentRelation' } },\n },\n omit: {\n DEFAULT : { type: 'boolean' },\n },\n OmitPortCall: {\n DEFAULT : { type: 'object', title: 'Omit Port Call', CHILDREN: ['reason','isFYI'] },\n },\n OmitTerminalCall: {\n DEFAULT : { type: 'object', title: 'Omit Terminal Call', CHILDREN: ['reason','isFYI'] },\n },\n omitted: {\n PARENTS : { PortCall: {}, TerminalCall: {} },\n DEFAULT : { type: 'boolean', readOnly: 'true', default: 'false' },\n },\n onBehalfOfConsignee : {\n PARENTS : { DocumentParties: {}, DocumentPartiesShippingInstructions: { $ref: '#/components/schemas/OnBehalfOfConsigneeShipper' } },\n DEFAULT : { $ref: '#/components/schemas/OnBehalfOfConsignee' },\n },\n OnBehalfOfConsignee: {\n DEFAULT : { type: 'object', title: 'On Behalf of Consignee', required: ['partyName'], CHILDREN: ['partyName','address','addressLines','identifyingCodes'] },\n },\n OnBehalfOfConsigneeShipper :{\n DEFAULT : { basedOn: 'OnBehalfOfConsignee', title: 'On Behalf of Consignee (Shipper provided)' },\n },\n onBehalfOfShipper : {\n PARENTS : { DocumentParties: {}, DocumentPartiesShippingInstructions: { $ref: '#/components/schemas/OnBehalfOfShipperShipper' } },\n DEFAULT : { $ref: '#/components/schemas/OnBehalfOfShipper' },\n },\n OnBehalfOfShipper: {\n DEFAULT : { type: 'object', title: 'On Behalf of Shipper', required: ['partyName'], CHILDREN: ['partyName','address','addressLines','identifyingCodes'] },\n },\n OnBehalfOfShipperShipper :{\n DEFAULT : { basedOn: 'OnBehalfOfShipper', title: 'On Behalf of Shipper (Shipper provided)' },\n },\n onCarriageBy: {\n PARENTS : { Transports: {} },\n DEFAULT : { type: 'string', maxLength: 50, pseudoEnum: ['VESSEL','RAIL','TRUCK','BARGE','MULTIMODAL'] },\n },\n onwardInlandRouting: {\n PARENTS : { Transports: {} },\n DEFAULT : { $ref: '#/components/schemas/OnwardInlandRouting' },\n },\n OnwardInlandRouting: {\n DEFAULT : { type: 'object', title: 'Onward Inland Routing', CHILDREN: ['locationName','facilityName','address','addressLines','facility','UNLocationCode'] },\n },\n oogUnits: {\n DEFAULT : { type: 'integer', format: 'int32', minimum: '0' },\n },\n servcieEventTypeCode: {\n DEFAULT : { type: 'string', enum: ['STRT', 'CMPL', 'ARRI', 'DEPA'] },\n },\n operatorCarrierCode: {\n PARENTS : { Vessel: {}, Barge: {} },\n DEFAULT : { type: 'string', maxLength: 10 },\n },\n operatorCarrierCodeListProvider: {\n PARENTS : { Vessel: {}, Barge: {} },\n DEFAULT : { type: 'string', enum: ['SMDG', 'NMFTA'] },\n },\n originChargesPaymentTerm: {\n PARENTS : { CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {}, CreateShippingInstructions: {}, UpdateShippingInstructions: {}, ShippingInstructions: {}, updatedShippingInstructions: {}, shippingInstructions: {} },\n DEFAULT : { $ref: '#/components/schemas/OriginChargesPaymentTerm' },\n },\n OriginChargesPaymentTerm: {\n DEFAULT : { type: 'object', title: 'Origin Charges Payment Term', CHILDREN: ['haulageChargesPaymentTermCode','portChargesPaymentTermCode','otherChargesPaymentTermCode'] },\n },\n OuterPackaging: {\n 'BKG_v2.0.x' : { DEFAULT: { required: null, CHILDREN: ['packageCode','imoPackagingCode','numberOfPackages','description','dangerousGoods'] } },\n// 'BKG_v2.0.1' : { DEFAULT: { required: null, CHILDREN: ['packageCode','imoPackagingCode','numberOfPackages','description','dangerousGoods'] } },\n// 'BKG_v2.0.2' : { DEFAULT: { required: null, CHILDREN: ['packageCode','imoPackagingCode','numberOfPackages','description','dangerousGoods'] } },\n DEFAULT : { type: 'object', title: 'Outer Packaging', required: ['numberOfPackages', 'description'], CHILDREN: ['packageCode','imoPackagingCode','numberOfPackages','description','woodDeclaration','dangerousGoods'] },\n },\n outerPackaging: {\n PARENTS : { CargoItemHBL: { $ref: '#/components/schemas/OuterPackagingHBL' }, CommodityShipper: {$ref: '#/components/schemas/OuterPackaging'}, Commodity: {$ref: '#/components/schemas/OuterPackaging'}, CargoItemCarrier: {$ref: '#/components/schemas/OuterPackaging'}, CargoItemShipper: {$ref: '#/components/schemas/OuterPackagingShipper'}, CargoItem: {$ref: '#/components/schemas/OuterPackaging'} },\n },\n OuterPackagingHBL: {\n DEFAULT : { type: 'object', title: 'Outer Packaging (House B/L)', required: ['packageCode'], CHILDREN: ['packageCode','numberOfPackages', 'shippingMarks', 'UNNumber'] },\n },\n OuterPackagingShipper: {\n DEFAULT : { type: 'object', title: 'Outer Packaging (Shipper)', required: ['numberOfPackages', 'description'], CHILDREN: ['packageCode','numberOfPackages','description','woodDeclaration'] },\n },\n other: {\n 'BKG_v2.0.x' : { PARENTS: { DocumentParties: {}, DocumentPartiesReq: {} } },\n// 'BKG_v2.0.1' : { PARENTS: { DocumentParties: {}, DocumentPartiesReq: {} } },\n// 'BKG_v2.0.2' : { PARENTS: { DocumentParties: {}, DocumentPartiesReq: {} } },\n PARENTS : { DocumentParties: {}, DocumentPartiesShippingInstructions: { items: {$ref: '#/components/schemas/OtherDocumentPartyShippingInstructions'} }, DocumentPartiesHouseBL: {items: { $ref: '#/components/schemas/OtherDocumentPartyHBL'} } },\n DEFAULT : { type: 'array', items: {$ref: '#/components/schemas/OtherDocumentParty'} },\n },\n otherChargesPaymentTermCode: {\n PARENTS : { OriginChargesPaymentTerm: {}, DestinationChargesPaymentTerm: {} },\n DEFAULT : { type: 'string', enum: ['PRE', 'COL'] },\n },\n OtherDocumentParty: {\n DEFAULT : { type: 'object', title: 'Other Document Party', required: ['party', 'partyFunction'], CHILDREN: ['party','partyFunction'] },\n },\n OtherDocumentPartyHBL: {\n DEFAULT : { type: 'object', title: 'Other Document Party (House B/L)', required: ['party', 'partyFunction'], CHILDREN: ['party','partyFunction'] },\n },\n OtherDocumentPartyShippingInstructions: {\n DEFAULT : { type: 'object', title: 'Other Document Party (Shipping Instructions)', required: ['party', 'partyFunction'], CHILDREN: ['party','partyFunction'] },\n },\n OtherTransport: {\n DEFAULT : { type: 'object', title: 'Other Transport', additionalProperties: 'false', required: ['modeOfTransport'], CHILDREN: ['modeOfTransport'] },\n },\n packageCode: {\n PARENTS : { OuterPackaging: {}, OuterPackagingShipper: {}, OuterPackagingHBL: {} },\n DEFAULT : { type: 'string', minLength: 2, maxLength: 2, pattern: '^[A-Z0-9]{2}$' },\n },\n packingGroup: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { type: 'integer', format: 'int32', minimum: 1, maximum: 3 },\n },\n party: {\n PARENTS : { OtherDocumentParty: {}, OtherDocumentPartyShippingInstructions: { $ref: '#/components/schemas/PartyShipper' }, OtherDocumentPartyHBL: { $ref: '#/components/schemas/PartyHBL' } },\n DEFAULT : { $ref: '#/components/schemas/Party' },\n },\n Party: {\n DEFAULT : { type: 'object', title: 'Party', required: ['partyName'], CHILDREN: ['partyName','address','addressLines','identifyingCodes','taxLegalReferences','partyContactDetails', 'reference'] },\n },\n PartyShipper: {\n DEFAULT : { basedOn: 'Party', title: 'Party (Shipper provided)' },\n },\n PartyAddress: {\n DEFAULT : { type: 'object', title: 'Party Address', required: ['street', 'city', 'countryCode'], CHILDREN: ['street','streetNumber','floor','postCode','POBox', 'city','UNLocationCode','stateRegion','countryCode'] },\n },\n PartyHBL: {\n DEFAULT : { type: 'object', title: 'Party (House B/L)', required: ['partyName'], CHILDREN: ['partyName','address','identifyingCodes','taxLegalReferences','partyContactDetails', 'reference'] },\n },\n partyCode: {\n PARENTS : { IdentifyingCode: {}, identifyingCode: {} },\n DEFAULT : { type: 'string', maxLength: 150 },\n },\n partyContactDetails: {\n 'BKG_v2.0.x' : { DEFAULT: {items: {$ref: '#/components/schemas/PartyContactDetail'} },PARENTS: { CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {}, BookingAgent: {minItems: 1}, Shipper: {minItems: 1}, Consignee: {minItems: 1}, ServiceContractOwner: {minItems: 1}, CarrierBookingOffice: {minItems: 1}, Party: {minItems: 1} } },\n PARENTS : { Buyer: {items: {$ref: '#/components/schemas/PartyContactDetailWithPattern'}}, BuyerHBL: {items: {$ref: '#/components/schemas/PartyContactDetailHBL'}}, Seller: {items: {$ref: '#/components/schemas/PartyContactDetailWithPattern'}}, SellerHBL: {items: {$ref: '#/components/schemas/PartyContactDetailHBL'}}, CreateShippingInstructions: {minItems: 1}, UpdateShippingInstructions: {minItems: 1}, ShippingInstructions: {minItems: 1}, shippingInstructions: {minItems: 1}, updatedShippingInstructions: {minItems: 1}, Shipper: {}, ShipperShipper: {}, ShipperHBL: { items: {$ref: '#/components/schemas/PartyContactDetailHBL'} }, Consignee: {}, ConsigneeShipper: {}, ConsigneeHBL: { items: {$ref: '#/components/schemas/PartyContactDetailHBL'} }, Endorsee: {}, EndorseeShipper: {}, NotifyParty: {}, NotifyPartyShipper: {}, NotifyPartyHBL: { items: {$ref: '#/components/schemas/PartyContactDetailHBL'} }, Party: {}, PartyShipper: {}, PartyHBL: { items: {$ref: '#/components/schemas/PartyContactDetailHBL' } }, CarriersAgentAtDestination: {}, IssuingParty: {}, ShippingInstructionsRequestor: {}, TransportDocument: {minItems: 1}, transportDocument: { minItems: 1 } },\n DEFAULT : { type: 'array', items: {$ref: '#/components/schemas/PartyContactDetail'} },\n },\n PartyContactDetail: {\n DEFAULT : { type: 'object', title: 'Party Contact Detail', required: ['name'], CHILDREN: ['name'] },\n },\n PartyContactDetailHBL: {\n DEFAULT : { type: 'object', title: 'Party Contact Detail (House B/L)', required: ['name'], CHILDREN: ['name'] },\n },\n PartyContactDetailWithPattern: {\n DEFAULT : { type: 'object', title: 'Party Contact Detail (with phone pattern)', required: ['name'], CHILDREN: ['name'] },\n },\n partyFunction: {\n 'BKG_v2.0.0' : { PARENTS: { OtherDocumentParty: { pseudoEnum: ['DDR','DDS','COW','COX','N1','N2','NI'] } } },\n 'BKG_v2.0.x' : { PARENTS: { OtherDocumentParty: { pseudoEnum: ['DDR','DDS','COW','COX','N1','N2','NI','NAC','CSR'] } } },\n// 'BKG_v2.0.2' : { PARENTS: { OtherDocumentParty: { pseudoEnum: ['DDR','DDS','COW','COX','N1','N2','NI','NAC'] } } },\n PARENTS : { OtherDocumentParty: { pseudoEnum: ['DDR','DDS','COW','COX','SCO'] }, OtherDocumentPartyShippingInstructions: { pseudoEnum: ['DDR','DDS','COW','COX','SCO','CS','MF','WH'] }, OtherDocumentPartyHBL: { pseudoEnum: ['DDR','DDS','CS','MF','WH']} },\n DEFAULT : { type: 'string', maxLength: 3 },\n },\n partyName: {\n PARENTS : { BookingAgent: {}, Shipper: {}, ShipperShipper: {}, OnBehalfOfShipper: {}, OnBehalfOfShipperShipper: {}, ShipperHBL: {}, Consignee: {}, OnBehalfOfConsignee: {}, OnBehalfOfConsigneeShipper: {}, ConsigneeShipper: {}, ConsigneeHBL: {}, Endorsee: {}, EndorseeShipper: {}, ServiceContractOwner: {}, CarrierBookingOffice: {}, Party: {}, PartyShipper: {}, PartyHBL: {}, CarriersAgentAtDestination: {}, IssuingParty: {}, IssueToParty: {}, ActorParty: {}, RecipientParty: {}, SurrenderRequestedBy: {}, NotifyParty: {}, NotifyPartyShipper: {}, NotifyPartyHBL: {}, Seller: {}, SellerHBL: {}, Buyer: {}, BuyerHBL: {}, ReceiverValidationResponse: {}, ShippingInstructionsRequestor: {}, RepresentedActorParty: {}, RepresentedRecipientParty: {} },\n DEFAULT : { type: 'string', maxLength: 70, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n paymentTermCode: {\n PARENTS : { Charge: {} },\n DEFAULT : { type: 'string', enum: ['PRE', 'COL'] },\n },\n phone: {\n PARENTS : { PartyContactDetail: {}, PartyContactDetailHBL: { pattern: '^\\\\+(?:[0-9] ?){6,14}[0-9]$' }, PartyContactDetailWithPattern: { pattern: '^\\\\+(?:[0-9] ?){6,14}[0-9]$' }, EmergencyContactDetails: {} },\n DEFAULT : { type: 'string', maxLength: 30, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n placeOfAcceptance: {\n PARENTS : { HouseBillOfLading: {} },\n DEFAULT : { $ref: '#/components/schemas/PlaceOfAcceptance' },\n },\n PlaceOfAcceptance: {\n DEFAULT : { type: 'object', title: 'Place of Acceptance', CHILDREN: ['locationName','countryCode','UNLocationCode'] },\n },\n PlaceOfArrival: {\n DEFAULT : { type: 'object', title: 'Place of Arrival', required: ['facilityTypeCode','location','dateTime'], CHILDREN: ['transportCallReference','facilityTypeCode','location','dateTime'] },\n },\n placeOfBLIssue: {\n PARENTS : { CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {} },\n DEFAULT : { $ref: '#/components/schemas/PlaceOfBLIssue' },\n },\n PlaceOfBLIssue: {\n DEFAULT : { type: 'object', title: 'Place of B/L Issue', oneOf: {UNLocationCode: {}, countryCode: {} }, CHILDREN: ['locationName'] },\n },\n PlaceOfDeparture: {\n DEFAULT : { type: 'object', title: 'Place of Departure', required: ['facilityTypeCode','location','dateTime'], CHILDREN: ['transportCallReference','facilityTypeCode','location','dateTime'] },\n },\n placeOfFinalDelivery: {\n PARENTS : { HouseBillOfLading: {} },\n DEFAULT : { $ref: '#/components/schemas/PlaceOfFinalDelivery' },\n },\n PlaceOfFinalDelivery: {\n DEFAULT : { type: 'object', title: 'Place of Final Delivery', CHILDREN: ['locationName','countryCode','UNLocationCode'] },\n },\n placeOfIssue: {\n PARENTS : { CreateShippingInstructions: {}, UpdateShippingInstructions: {}, ShippingInstructions: {}, TransportDocument: {} },\n DEFAULT : { $ref: '#/components/schemas/PlaceOfIssue' },\n },\n PlaceOfIssue: {\n DEFAULT : { type: 'object', title: 'Place of Issue', oneOf: true, CHILDREN: ['locationName'] },\n },\n placeOfDelivery: {\n PARENTS : { Transports: {}, PointToPoint: {} },\n DEFAULT : { $ref: '#/components/schemas/PlaceOfDelivery' },\n },\n PlaceOfDelivery: {\n 'CS_v1.0.x' : { DEFAULT: { required: ['facilityTypeCode','location','dateTime'], CHILDREN: ['facilityTypeCode','location','dateTime'] } },\n// 'CS_v1.0.1' : { DEFAULT: { required: ['facilityTypeCode','location','dateTime'], CHILDREN: ['facilityTypeCode','location','dateTime'] } },\n DEFAULT : { type: 'object', title: 'Place of Delivery', CHILDREN: ['locationName','facilityName','address','addressLines','facility','UNLocationCode','geoCoordinate'] },\n },\n placeOfReceipt: {\n PARENTS : { Transports: {}, PointToPoint: {} },\n DEFAULT : { $ref: '#/components/schemas/PlaceOfReceipt' },\n },\n PlaceOfReceipt: {\n 'CS_v1.0.x' : { DEFAULT: { required: ['facilityTypeCode','location','dateTime'], CHILDREN: ['facilityTypeCode','location','dateTime'] } },\n// 'CS_v1.0.1' : { DEFAULT: { required: ['facilityTypeCode','location','dateTime'], CHILDREN: ['facilityTypeCode','location','dateTime'] } },\n DEFAULT : { type: 'object', title: 'Place of Receipt', CHILDREN: ['locationName','facilityName','address','addressLines','facility','UNLocationCode','geoCoordinate'] },\n },\n plannedArrivalDate: {\n PARENTS : { Transport: {}, Transports: {} },\n DEFAULT : { type: 'string', format: 'date' },\n },\n plannedDateTime: {\n DEFAULT : { type: 'string', format: 'date-time'}\n },\n plannedDepartureDate: {\n PARENTS : { Transport: {}, Transports: {} },\n DEFAULT : { type: 'string', format: 'date' },\n },\n pm10: {\n PARENTS : { footprint: {}, solutionFootprint: {} },\n DEFAULT : { type: 'number', format: 'double' },\n },\n POBox: {\n DEFAULT : { type: 'string', maxLength: 20 },\n },\n PointToPoint: {\n 'CS_v1.0.0' : { DEFAULT: { type: 'object', title: 'Point to Point', required: ['placeOfReceipt', 'placeOfDelivery', 'legs'], CHILDREN: ['placeOfReceipt','placeOfDelivery','receiptTypeAtOrigin','deliveryTypeAtDestination','cutOffTimes','solutionNumber','transitTime','legs'] } },\n DEFAULT : { type: 'object', title: 'Point to Point', required: ['placeOfReceipt', 'placeOfDelivery', 'legs'], CHILDREN: ['placeOfReceipt','placeOfDelivery','receiptTypeAtOrigin','deliveryTypeAtDestination','cutOffTimes','solutionNumber','routingReference','transitTime','solutionFootprint','legs'] },\n },\n portCall: {\n DEFAULT : { $ref: '#/components/schemas/PortCall' },\n },\n PortCall: {\n DEFAULT : { type: 'object', title: 'Port Call', required: ['portCallID', 'UNLocationCode','vessel'], CHILDREN: ['portCallID','portVisitReference','UNLocationCode','vessel','omitted','isFYI'] },\n },\n PortCalls: {\n DEFAULT : { type: 'array', items: { $ref: '#/components/schemas/PortCall' } },\n },\n portCallID: {\n DEFAULT : { type: 'string', format: 'uuid' },\n },\n portCallPhaseTypeCode: {\n DEFAULT : { type: 'string', enum: ['INBD', 'ALGS', 'SHIF', 'OUTB'], pseudoEnum: []}, // No validation added for description\n },\n PortCallServices: {\n DEFAULT : { type: 'array', items: { $ref: '#/components/schemas/PortCallService' } },\n },\n PortCallService: {\n DEFAULT : { type: 'object', title: 'Port Call Service', required: ['terminalCallID','portCallServiceID','portCallServiceTypeCode','portCallServiceEventTypeCode','portCallServiceLocation'], CHILDREN: ['terminalCallID','portCallServiceID','portCallServiceTypeCode','portCallServiceEventTypeCode','portCallPhaseTypeCode','facilityTypeCode','portCallServiceLocation','moves','cancelled','declined','isFYI'] },\n },\n portCallServiceEventTypeCode: {\n DEFAULT : { type: 'string', enum: ['STRT', 'CMPL', 'ARRI', 'DEPA'], pseudoEnum: []}, // No validation added for description\n },\n portCallServiceID: {\n DEFAULT : { type: 'string', format: 'uuid' },\n },\n portCallServiceLocation: {\n PARENTS : { PortCallService: { $ref: '#/components/schemas/PortCallServiceLocation' }, Timestamp: { $ref: '#/components/schemas/PortCallServiceLocationTimestamp' } },\n },\n PortCallServiceLocation: {\n DEFAULT : { type: 'object', title: 'Port Call Service Location', required: ['UNLocationCode'], CHILDREN: ['locationName','facility','UNLocationCode', 'geoCoordinate'] },\n },\n PortCallServiceLocationTimestamp: {\n DEFAULT : { type: 'object', title: 'Port Call Service Location (Timestamp)', required: ['UNLocationCode'], CHILDREN: ['locationName','facility','UNLocationCode', 'geoCoordinate'] },\n },\n portCallServiceTypeCode: {\n DEFAULT : { type: 'string', maxLength: 50, pattern: '^\\\\S(?:.*\\\\S)?$', pseudoEnum: []}, // No validation added for description\n },\n portChargesPaymentTermCode: {\n PARENTS : { OriginChargesPaymentTerm: {}, DestinationChargesPaymentTerm: {} },\n DEFAULT : { type: 'string', enum: ['PRE', 'COL'] },\n },\n portOfDischarge: {\n PARENTS : { Transports: {} },\n DEFAULT : { $ref: '#/components/schemas/PortOfDischarge' },\n },\n PortOfDischarge: {\n DEFAULT : { type: 'object', title: 'Port of Discharge', CHILDREN: ['locationName','city','UNLocationCode'] },\n },\n portOfLoading: {\n PARENTS : { Transports: {} },\n DEFAULT : { $ref: '#/components/schemas/PortOfLoading' },\n },\n PortOfLoading: {\n DEFAULT : { type: 'object', title: 'Port of Loading', CHILDREN: ['locationName','city','UNLocationCode'] },\n },\n PortSchedule: {\n DEFAULT : { type: 'object', title: 'Port Schedule', required: ['location'], CHILDREN: ['location', 'vesselSchedules'] },\n },\n PortScheduleLocation: {\n DEFAULT : { type: 'object', title: 'Port Schedule Location', CHILDREN: ['locationName','facilityName','UNLocationCode','facilitySMDGCode'] },\n },\n portVisitReference: {\n PARENTS : { TerminalTimestamp: {}, TerminalCall: {}, TransportCall: {}, VesselTransport: {}, BargeTransport: {}, PortCall: {}, },\n DEFAULT : { type: 'string', maxLength: 50 },\n },\n positionCode: {\n PARENTS : { Timestamp: {} },\n DEFAULT : { type: 'string', pseudoEnum: ['PBPL', 'BRTH', 'ANCH', 'PORT'] },\n },\n postCode: {\n 'OVS_v3.0.x' : { DEFAULT: { maxLength: 50 } },\n PARENTS : { Address: {}, address: {}, AddressHBL: {}, PartyAddress: {} },\n DEFAULT : { type: 'string', maxLength: 10 },\n },\n preCarriageBy: {\n PARENTS : { Transports: {} },\n DEFAULT : { type: 'string', maxLength: 50, pseudoEnum: ['VESSEL','RAIL','TRUCK','BARGE','MULTIMODAL'] },\n },\n previousEnvelopeTransferChainEntrySignedContentChecksum: {\n DEFAULT : { type: 'string', minLength: 64, maxLength: 64, pattern: '^[0-9a-f]+$' },\n },\n property: {\n PARENTS : { ErrorResponse: {}, Feedback: {}, DetailedError: {} },\n DEFAULT : { type: 'string', maxLength: 100 },\n },\n propertyPath: {\n PARENTS : { FeedbackElement: {} },\n DEFAULT : { type: 'string', maxLength: 1000 },\n },\n provider: {\n PARENTS : { EmergencyContactDetails: {} },\n DEFAULT : { type: 'string', maxLength: 255 },\n },\n properShippingName: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { type: 'string', maxLength: 250 },\n },\n providerCorrelationReference: {\n PARENTS : { ErrorResponse: {} },\n DEFAULT : { type: 'string', maxLength: 100 },\n },\n publisherRole: {\n DEFAULT : { type: 'string', enum: ['CA', 'AG', 'VSL', 'ATH', 'PLT', 'TWG', 'MOR', 'TR', 'LSH', 'BUK', 'SLU', 'SVP'] },\n },\n purchaseOrderReferences: {\n DEFAULT : { type: 'array', items: { type: 'string', maxLength: 35, pattern: '^\\\\S(?:.*\\\\S)?$' } },\n },\n quantity: {\n PARENTS : { InnerPackaging: { type: 'integer', format: 'int32' }, Charge: { type: 'number', format: 'float', minimum: '0' } },\n },\n reason: {\n 'JIT_v2.0.0' : { DEFAULT: { maxLength: 500 } },\n PARENTS : { CancelBookingRequest: {}, EnvelopeTransferFinishedResponse: {maxLength: 255}, IssuanceError: {maxLength: 255, pattern: '^\\\\S(?:.*\\\\S)?$'}, ShippingInstructions: {}, shippingInstructions: {}, updatedShippingInstructions: {}, ShippingInstructionsRefStatus: {}, ShippingInstructionsRefCancelStatus: {}, Booking: {}, booking: {}, amendedBooking: {}, data: {}, BookingRefStatus: {}, BookingRefCancelledStatus: {}, IssuanceResponse: {maxLength: 255, pattern: '^\\\\S(?:.*\\\\S)?$' } },\n DEFAULT : { type: 'string', maxLength: 5000 },\n },\n reasonCode: {\n DEFAULT : { type: 'string', maxLength: 4, pseudoEnum: ['SWTP', 'COD', 'SWI'] },\n },\n reeferPluggedContainerUnits: {\n DEFAULT : { $ref: '#/components/schemas/ReeferPluggedContainerUnits' }\n },\n ReeferPluggedContainerUnits: {\n DEFAULT : { type: 'object', title: 'Reefer Plugged Container Units', oneOf:true },\n },\n remark: {\n DEFAULT : { type: 'string', maxLength: 500 },\n },\n receiptTypeAtOrigin: {\n PARENTS : { CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {}, TransportDocument: {}, transportDocument: {}, PointToPoint: {} },\n DEFAULT : { type: 'string', maxLength: 3, enum: ['CY', 'SD', 'CFS'] },\n },\n receivedAdditionalDocumentChecksums: {\n DEFAULT : { type: 'array', items: { $ref: '#/components/schemas/DocumentChecksum' } },\n },\n receivedForShipmentDate: {\n PARENTS : { TransportDocument: {}, transportDocument: {} },\n DEFAULT : { type: 'string', format: 'date' },\n },\n ReceiverValidationResponse: {\n DEFAULT : { type: 'object', title: 'Receiver Validation Response', required: ['partyName'], CHILDREN: ['partyName'] },\n },\n recipient: {\n PARENTS : { EndorsementChainLink: {}, Transaction: {} },\n DEFAULT : { $ref: '#/components/schemas/RecipientParty' },\n },\n reference: {\n DEFAULT : { type: 'string', maxLength: 35, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n Reference: {\n DEFAULT : { type: 'object', title: 'Reference', required: ['type', 'value'], CHILDREN: ['type','value'] },\n },\n ReferenceConsignmentItem: {\n DEFAULT : { type: 'object', title: 'Reference (Consignment Item)', required: ['type', 'values'], CHILDREN: ['type','values'] },\n },\n referenceNumber: {\n PARENTS : { EmergencyContactDetails: {} },\n DEFAULT : { type: 'string', maxLength: 255 },\n },\n references: {\n PARENTS : { CreateShippingInstructions: {}, UpdateShippingInstructions: {}, ShippingInstructions: {}, updatedShippingInstructions: {}, shippingInstructions: {}, CreateBooking: { items: {$ref: '#/components/schemas/ReferenceShipper'} }, UpdateBooking: { items: {$ref: '#/components/schemas/ReferenceShipper'} }, Booking: {}, booking: {}, amendedBooking: {}, RequestedEquipment: {}, RequestedEquipmentShipper: { items: {$ref: '#/components/schemas/ReferenceShipper'} }, CommodityShipper: { items: {$ref: '#/components/schemas/ReferenceShipper'} }, Commodity: {}, ConsignmentItem: { items: {$ref: '#/components/schemas/ReferenceConsignmentItem'} }, ConsignmentItemShipper: { items: {$ref: '#/components/schemas/ReferenceConsignmentItem'} }, UtilizedTransportEquipmentCarrier: {}, UtilizedTransportEquipmentShipper: {}, TransportDocument: {}, transportDocument: {}, UtilizedTransportEquipment: {} },\n DEFAULT : { type: 'array', items: {$ref: '#/components/schemas/Reference'} },\n },\n ReferenceShipper: {\n DEFAULT : { type: 'object', title: 'Reference (Shipper)', required: ['type', 'value'], CHILDREN: ['type','value'] },\n },\n replyToTimestampID: {\n DEFAULT : { type: 'string', format: 'uuid' },\n },\n representedParty: {\n PARENTS : { RecipientParty: {$ref: '#/components/schemas/RepresentedRecipientParty'}, ActorParty: {$ref: '#/components/schemas/RepresentedActorParty'} },\n },\n RepresentedActorParty: {\n DEFAULT : { type: 'object', title: 'Represented Party', required: ['partyName'],CHILDREN: ['partyName','identifyingCodes'] },\n },\n RepresentedRecipientParty: {\n DEFAULT : { type: 'object', title: 'Represented Party', required: ['partyName'],CHILDREN: ['partyName','identifyingCodes'] },\n },\n RequestedCarrierCertificate: {\n DEFAULT : { type: 'string', maxLength: 100, title: 'Requested Carrier Certificate' },\n },\n RequestedCarrierClause: {\n DEFAULT : { type: 'string', maxLength: 100, title: 'Requested Carrier Clause' },\n },\n requestedCarrierCertificates: {\n PARENTS : { CreateShippingInstructions: {}, UpdateShippingInstructions: {}, ShippingInstructions: {}, updatedShippingInstructions: {}, shippingInstructions: {} },\n DEFAULT : { type: 'array', items: { type: 'string', maxLength: 100, pseudoEnum: ['SHIPMENT_VOYAGE_PARTICULARS_1','SHIPMENT_VOYAGE_PARTICULARS_2','SHIPMENT_VOYAGE_PARTICULARS_3','SHIPMENT_VOYAGE_PARTICULARS_4','SHIPMENT_VOYAGE_PARTICULARS_5','SHIPMENT_VOYAGE_PARTICULARS_6','SHIPMENT_VOYAGE_PARTICULARS_7','VESSEL_PARTICULARS_1','VESSEL_PARTICULARS_2','VESSEL_PARTICULARS_3','VESSEL_PARTICULARS_4','VESSEL_PARTICULARS_5','VESSEL_PARTICULARS_6','VESSEL_PARTICULARS_7','VESSEL_PARTICULARS_8','VESSEL_PARTICULARS_9','VESSEL_PARTICULARS_10','VESSEL_PARTICULARS_11','VESSEL_PARTICULARS_12','VESSEL_PARTICULARS_13','VESSEL_PARTICULARS_14','VESSEL_PARTICULARS_15','VESSEL_PARTICULARS_16','VESSEL_PARTICULARS_17','VESSEL_PARTICULARS_18'] } },\n },\n requestedCarrierClauses: {\n PARENTS : { CreateShippingInstructions: {}, UpdateShippingInstructions: {}, ShippingInstructions: {}, updatedShippingInstructions: {}, shippingInstructions: {} },\n DEFAULT : { type: 'array', items: { type: 'string', maxLength: 100, pseudoEnum: ['CARGO_CARGOSPECIFICS','VESSELCONVEYANCE_COUNTRYSPECIFIC','CARGO_RETURNOFEMPTYCONTAINER','CARGO_CARGOVALUE','CARGO_REEFERTEMPERATURE','CARGO_CONFLICTINGTEMPERATURES_MIXEDLOADS','SHIPPERSLOADSTOWWEIGHTANDCOUNT','INTRANSITCLAUSE'] } },\n },\n requestedDateTime: {\n DEFAULT : { type: 'string', format: 'date-time'}\n },\n RequestedEquipment: {\n 'BKG_v2.0.0' : { DEFAULT: { type: 'object', title: 'Requested Equipment', required: ['ISOEquipmentCode', 'units','isShipperOwned'], oneOf: true, CHILDREN: ['ISOEquipmentCode','units','containerPositionings','emptyContainerPickup','equipmentReferences','tareWeight','cargoGrossWeight','isShipperOwned','isNonOperatingReefer','activeReeferSettings','references','customsReferences', 'commodities'] } },\n 'BKG_v2.0.1' : { DEFAULT: { type: 'object', title: 'Requested Equipment', required: ['ISOEquipmentCode', 'units','isShipperOwned'], oneOf: true, CHILDREN: ['ISOEquipmentCode','units','containerPositionings','emptyContainerPickup','equipmentReferences','tareWeight','cargoGrossWeight','isShipperOwned','isNonOperatingReefer','activeReeferSettings','references','customsReferences', 'commodities'] } },\n DEFAULT : { type: 'object', title: 'Requested Equipment', required: ['ISOEquipmentCode', 'units','isShipperOwned'], oneOf: true, CHILDREN: ['ISOEquipmentCode','units','containerPositionings','emptyContainerPickup','originEmptyContainerPickup','fullContainerPickupDateTime','equipmentReferences','tareWeight','cargoGrossWeight','isShipperOwned','isNonOperatingReefer','activeReeferSettings','references','customsReferences', 'commodities'] },\n },\n RequestedEquipmentShipper: {\n 'BKG_v2.0.0' : { DEFAULT: { type: 'object', title: 'Requested Equipment (Shipper)', required: ['ISOEquipmentCode', 'units','isShipperOwned'], oneOf: true, CHILDREN: ['ISOEquipmentCode','units','containerPositionings','emptyContainerPickup','equipmentReferences','tareWeight','cargoGrossWeight','isShipperOwned','isNonOperatingReefer','activeReeferSettings','references','customsReferences', 'commodities'] } },\n 'BKG_v2.0.1' : { DEFAULT: { type: 'object', title: 'Requested Equipment (Shipper)', required: ['ISOEquipmentCode', 'units','isShipperOwned'], oneOf: true, CHILDREN: ['ISOEquipmentCode','units','containerPositionings','emptyContainerPickup','equipmentReferences','tareWeight','cargoGrossWeight','isShipperOwned','isNonOperatingReefer','activeReeferSettings','references','customsReferences', 'commodities'] } },\n DEFAULT : { type: 'object', title: 'Requested Equipment (Shipper)', required: ['ISOEquipmentCode', 'units','isShipperOwned'], oneOf: true, CHILDREN: ['ISOEquipmentCode','units','containerPositionings','emptyContainerPickup','originEmptyContainerPickup','fullContainerPickupDateTime','equipmentReferences','tareWeight','cargoGrossWeight','isShipperOwned','isNonOperatingReefer','activeReeferSettings','references','customsReferences','commodities'] },\n },\n requestedEquipments: {\n PARENTS : { CreateBooking: {items: {$ref: '#/components/schemas/RequestedEquipmentShipper'}}, UpdateBooking: {items: {$ref: '#/components/schemas/RequestedEquipmentShipper'}}, Booking: {items: {$ref: '#/components/schemas/RequestedEquipment'}}, booking: {items: {$ref: '#/components/schemas/RequestedEquipment'}}, amendedBooking: {items: {$ref: '#/components/schemas/RequestedEquipment'}} },\n DEFAULT : { type: 'array', minItems: 1 },\n },\n requestedNumberOfTransportDocuments: {\n DEFAULT : { type: 'integer', format: 'int32', minimum: 1 },\n },\n requestedOnCarriageModeOfTransport: {\n DEFAULT : { type: 'string', maxLength: 50, pseudoEnum: ['VESSEL','RAIL','TRUCK','BARGE','RAIL_TRUCK', 'BARGE_RAIL', 'BARGE_TRUCK','MULTIMODAL'] },\n },\n requestedPreCarriageModeOfTransport: {\n DEFAULT : { type: 'string', maxLength: 50, pseudoEnum: ['VESSEL','RAIL','TRUCK','BARGE','RAIL_TRUCK', 'BARGE_RAIL', 'BARGE_TRUCK','MULTIMODAL'] },\n },\n requestUri: {\n PARENTS : { ErrorResponse: {} },\n DEFAULT : { type: 'string' },\n },\n RequiredEquipment: {\n DEFAULT : { type: 'object', title: 'Equipment (Required Properties)', required: ['equipmentReference', 'ISOEquipmentCode', 'tareWeight'], CHILDREN: ['equipmentReference','ISOEquipmentCode','tareWeight'] },\n },\n responseCode: {\n DEFAULT : { type: 'string', enum: ['RECE','DUPE','BSIG','BENV','INCD','MDOC','DISE'] },\n },\n restows: {\n DEFAULT : { $ref: '#/components/schemas/Restows' },\n },\n Restows: {\n DEFAULT : { type: 'object', title: 'Restows', oneOf:true },\n },\n role: {\n PARENTS : { VesselVoyage: {} },\n DEFAULT : { type: 'string', maxLength: 30, pseudoEnum: ['FIRST_SEA_GOING', 'MOTHER'] },\n },\n routingOfConsignmentCountries: {\n DEFAULT : { type: 'array', minItems: 1, items: { type: 'string', maxLength: 2, minLength: 2, pattern: '^[A-Z]{2}$' } },\n },\n routingReference: {\n DEFAULT : { type: 'string', maxLength: 5000, pattern: '^\\\\S(?:.*\\\\S)?$', pseudoEnum: [] },\n },\n SADT: {\n PARENTS : { Limits: {} },\n DEFAULT : { type: 'number', format: 'float' },\n },\n SAPT: {\n PARENTS : { Limits: {} },\n DEFAULT : { type: 'number', format: 'float' },\n },\n Schedule: {\n DEFAULT : { type: 'object', title: 'Schedule', required: ['servicePartners', 'isDummyVessel', 'timestamps'] },\n },\n Seal: {\n DEFAULT : { type: 'object', title: 'Seal', required: ['number'], CHILDREN: ['number','source'] },\n },\n seals: {\n PARENTS : { UtilizedTransportEquipmentHBL: {}, UtilizedTransportEquipmentShipper: {}, UtilizedTransportEquipment: {} },\n DEFAULT : { type: 'array', minItems: 1, items: {$ref: '#/components/schemas/Seal'} },\n },\n segregationGroups: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { type: 'array', items: {type: 'string', maxLength: 2, pseudoEnum: ['1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18'] } },\n },\n selfFilerCode: {\n PARENTS : { AdvanceManifestFiling: {} },\n DEFAULT : { type: 'string', maxLength: 100, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n seller: {\n PARENTS : { DocumentParties: {}, DocumentPartiesShippingInstructions: {}, DocumentPartiesHouseBL: { $ref: '#/components/schemas/SellerHBL' } },\n DEFAULT : { $ref: '#/components/schemas/Seller' },\n },\n Seller: {\n DEFAULT : { type: 'object', title: 'Seller', required: ['partyName', 'typeOfPerson'], CHILDREN: ['partyName','typeOfPerson','address','addressLines','identifyingCodes','taxLegalReferences','partyContactDetails'] },\n },\n SellerHBL: {\n DEFAULT : { type: 'object', title: 'Seller (House B/L)', required: ['partyName', 'typeOfPerson'], CHILDREN: ['partyName','typeOfPerson','address','identifyingCodes','taxLegalReferences','partyContactDetails'] },\n },\n sendToPlatform: {\n PARENTS : { IssueToParty: {} },\n DEFAULT : { type: 'string', maxLength: 4, pattern: '^\\\\S+$', pseudoEnum: EBL_PLATFORM_SOLUTION_PROVIDERS },\n },\n sequenceNumber: {\n DEFAULT : { type: 'integer', format: 'int32' },\n },\n serviceContractOwner: {\n 'BKG_v2.0.x' : { PARENTS: { DocumentParties: {}, DocumentPartiesReq: {} } },\n// 'BKG_v2.0.1' : { PARENTS: { DocumentParties: {}, DocumentPartiesReq: {} } },\n// 'BKG_v2.0.2' : { PARENTS: { DocumentParties: {}, DocumentPartiesReq: {} } },\n PARENTS : { documentParties: {} },\n DEFAULT : { $ref: '#/components/schemas/ServiceContractOwner' },\n },\n ServiceContractOwner: {\n DEFAULT : { type: 'object', title: 'Service Contract Owner', required: ['partyName'], CHILDREN: ['partyName','address','addressLines','partyContactDetails','identifyingCodes','taxLegalReferences', 'reference'] },\n },\n serviceContractReference: {\n PARENTS : { CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {}, TransportDocument: {}, transportDocument: {} },\n DEFAULT : { type: 'string', maxLength: 30 },\n },\n ServicePartner: {\n 'OVS_HUB_REF_v1.0.0' : { DEFAULT: { type: 'object', title: 'Service Partner', required: [ 'carrierSMDGCode','carrierServiceCode' ], CHILDREN: ['carrierSMDGCode', 'carrierServiceName','carrierServiceCode'] } },\n DEFAULT : { type: 'object', title: 'Service Partner', CHILDREN: ['carrierCode','carrierCodeListProvider', 'carrierServiceName','carrierServiceCode','carrierImportVoyageNumber','carrierExportVoyageNumber'] },\n },\n ServicePartnerSchedule: {\n DEFAULT : { type: 'object', title: 'Service Partner Schedule', required: ['carrierServiceName','carrierServiceCode','carrierImportVoyageNumber','carrierExportVoyageNumber'], CHILDREN: ['carrierCode','carrierCodeListProvider','carrierServiceName','carrierServiceCode','carrierImportVoyageNumber','carrierExportVoyageNumber'] },\n },\n servicePartners: {\n PARENTS : { PartnerService: {items: {$ref: '#/components/schemas/ServicePartner' } }, Schedule: {}, VesselTransport: {minItems: null, items: {$ref: '#/components/schemas/ServicePartner' } }, BargeTransport: {minItems: null, items: {$ref: '#/components/schemas/ServicePartner' } } },\n DEFAULT : { type: 'array', minItems: 1, items: { $ref: '#/components/schemas/ServicePartnerSchedule' } },\n },\n ServiceSchedule: {\n 'OVS_v3.0.x' : { DEFAULT: { type: 'object', title: 'Service Schedule', required: ['carrierServiceCode','carrierServiceName'], CHILDREN: ['carrierServiceName','carrierServiceCode','universalServiceReference','vesselSchedules'] } },\n DEFAULT : { type: 'object', title: 'Service Schedule', required: ['carrierServiceName', 'carrierServiceCode', 'vesselSchedules'], CHILDREN: ['carrierServiceName','carrierServiceCode','universalServiceReference','vesselSchedules'] },\n },\n severity: {\n PARENTS : { Feedback: {}, FeedbackElement: {} },\n DEFAULT : { type: 'string', maxLength: 50, pseudoEnum: ['INFO','WARN','ERROR'] },\n },\n shipmentCutOffTimes: {\n PARENTS : { Booking: {}, booking: {}, amendedBooking: {} },\n DEFAULT : { type: 'array', items: {$ref: '#/components/schemas/ShipmentCutOffTime'} },\n },\n ShipmentCutOffTime: {\n DEFAULT : { type: 'object', title: 'Shipment Cut-Off Time', required: ['cutOffDateTimeCode', 'cutOffDateTime'], CHILDREN: ['cutOffDateTimeCode','cutOffDateTime'] },\n },\n ShipmentLocation: {\n DEFAULT : { type: 'object', title: 'Shipment Location', required: ['location', 'locationTypeCode'], CHILDREN: ['location','locationTypeCode', 'departingVesselVoyage'] },\n },\n shipmentLocations: {\n PARENTS : { CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {} },\n DEFAULT : { type: 'array', minItems: 1, items: {$ref: '#/components/schemas/ShipmentLocation'} },\n },\n shippedOnBoardDate: {\n PARENTS : { TransportDocument: {}, transportDocument: {} },\n DEFAULT : { type: 'string', format: 'date' },\n },\n shipper: {\n 'BKG_v2.0.x' : { PARENTS: { DocumentParties: {}, DocumentPartiesReq: {} } },\n// 'BKG_v2.0.1' : { PARENTS: { DocumentParties: {}, DocumentPartiesReq: {} } },\n// 'BKG_v2.0.2' : { PARENTS: { DocumentParties: {}, DocumentPartiesReq: {} } },\n PARENTS : { DocumentParties: {}, DocumentPartiesShippingInstructions: { $ref: '#/components/schemas/ShipperShipper' }, DocumentPartiesHouseBL: {$ref: '#/components/schemas/ShipperHBL'} },\n DEFAULT : { $ref: '#/components/schemas/Shipper' },\n },\n Shipper: {\n 'BKG_v2.0.x' : { DEFAULT: { CHILDREN: ['partyName','eblPlatform','address','addressLines','partyContactDetails','identifyingCodes','taxLegalReferences', 'reference', 'purchaseOrderReferences'] } },\n// 'BKG_v2.0.1' : { DEFAULT: { CHILDREN: ['partyName','address','partyContactDetails','identifyingCodes','taxLegalReferences', 'reference', 'purchaseOrderReferences'] } },\n// 'BKG_v2.0.2' : { DEFAULT: { CHILDREN: ['partyName','address','partyContactDetails','identifyingCodes','taxLegalReferences', 'reference', 'purchaseOrderReferences'] } },\n DEFAULT : { type: 'object', title: 'Shipper', required: ['partyName'], CHILDREN: ['partyName','eblPlatform','typeOfPerson','address','addressLines','displayedAddress','identifyingCodes','taxLegalReferences','partyContactDetails', 'reference', 'purchaseOrderReferences'] },\n },\n ShipperShipper: {\n DEFAULT : { basedOn: 'Shipper', title: 'Shipper (Shipper provided)' },\n },\n ShipperHBL: {\n DEFAULT : { type: 'object', title: 'Shipper (House B/L)', required: ['partyName', 'typeOfPerson'], CHILDREN: ['partyName','typeOfPerson','address','identifyingCodes','taxLegalReferences','partyContactDetails'] },\n },\n ShippingInstructions: {\n DEFAULT : { type: 'object', title: 'Shipping Instructions', required: ['shippingInstructionsStatus', 'transportDocumentTypeCode', 'isShippedOnBoardType', 'isElectronic', 'isToOrder', 'freightPaymentTermCode', 'partyContactDetails', 'documentParties', 'isCargoDeliveredInICS2Zone', 'consignmentItems', 'utilizedTransportEquipments'] },\n },\n shippingInstructions: {\n PARENTS : { ShippingInstructionsData: {} },\n DEFAULT : { $ref: '#/components/schemas/ShippingInstructionsFullNotification' },\n },\n ShippingInstructionsData: {\n DEFAULT : { type: 'object', title: 'Shipping Instructions Data', required: ['shippingInstructionsStatus'], CHILDREN: ['shippingInstructionsStatus', 'updatedShippingInstructionsStatus', 'shippingInstructionsReference', 'transportDocumentReference','transportDocumentSubReference', 'feedbacks', 'shippingInstructions', 'updatedShippingInstructions'] }\n },\n ShippingInstructionsFullNotification: {\n DEFAULT : { type: 'object', title: 'Shipping Instructions Full Notification', allOf: true },\n },\n ShippingInstructionsNotification: {\n DEFAULT : { type: 'object', title: 'Shipping Instructions Notification', required: ['specversion', 'id', 'source', 'type', 'time', 'datacontenttype', 'subscriptionReference', 'data']},\n },\n shippingInstructionsReference: {\n PARENTS : { CreateShippingInstructionsResponse: {}, UpdateShippingInstructions: {}, ShippingInstructions: {}, updatedShippingInstructions: {}, shippingInstructions: {}, ShippingInstructionsRefStatus: {}, ShippingInstructionsRefCancelStatus: {}, TransportDocument: {}, transportDocument: {}, ShippingInstructionsData: {}, TransportDocumentData: {} },\n DEFAULT : { type: 'string', maxLength: 100, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n ShippingInstructionsRefCancelStatus: {\n DEFAULT : { type: 'object', title: 'Shipping Instructions Cancel Response', required: ['shippingInstructionsStatus'] },\n },\n ShippingInstructionsRefStatus: {\n DEFAULT : { type: 'object', title: 'Shipping Instructions Response', required: ['shippingInstructionsStatus'] },\n },\n shippingInstructionsRequestor: {\n PARENTS : { DocumentPartiesShippingInstructions: {} },\n DEFAULT : { $ref: '#/components/schemas/ShippingInstructionsRequestor' },\n },\n ShippingInstructionsRequestor: {\n DEFAULT : { type: 'object', title: 'Shipping Instructions Requestor', required: ['partyName'], CHILDREN: ['partyName','address','addressLines','identifyingCodes','partyContactDetails'] },\n },\n shippingInstructionsRevisionNumber: {\n DEFAULT : { type: 'integer' },\n },\n shippingInstructionsStatus: {\n PARENTS : { CancelShippingInstructionsUpdate: { pseudoEnum: [] }, ShippingInstructions: {}, shippingInstructions: {}, updatedShippingInstructions: {}, ShippingInstructionsRefStatus: {}, ShippingInstructionsRefCancelStatus: {}, ShippingInstructionsData: {} },\n DEFAULT : { type: 'string', maxLength: 50, pseudoEnum: ['RECEIVED','PENDING_UPDATE','COMPLETED', 'CANCELLED', 'DECLINED'] },\n },\n shippingMarks: {\n PARENTS : { OuterPackagingHBL: {type: 'string', maxItems: null, maxLength: 512, items: null}, ConsignmentItem: {}, ConsignmentItemShipper: {}, UtilizedTransportEquipment: {}, UtilizedTransportEquipmentShipper: {} },\n DEFAULT : { type: 'array', maxItems: 50, items: {type: 'string', maxLength: 35 } },\n },\n shippingMarksForCustoms: {\n PARENTS : { ConsignmentItemShipper: {} },\n DEFAULT : { type: 'array', maxItems: 50, items: {type: 'string', maxLength: 35 } },\n },\n signatureHash: {\n DEFAULT : { type: 'string', pattern: '^[0-9a-f]+$', maxLength: 64, minLength: 64 },\n },\n size: {\n PARENTS : { DocumentMetadata: {} },\n DEFAULT : { type: 'number', minimum: 1 }\n },\n sox: {\n PARENTS : { footprint: {}, solutionFootprint: {} },\n DEFAULT : { type: 'number', format: 'double' },\n },\n solutionFootprint: {\n DEFAULT : { type: 'object', CHILDREN: ['co2','co2e','sox','nox','pm10'] }\n },\n solutionNumber: {\n PARENTS : { PointToPoint: {} },\n DEFAULT : { type: 'integer', format: 'int32', minimum: 1 }\n },\n source: {\n // Removing DCSA_CLOUDEVENT_GROUP in the default in order to handle 'source' inside a 'Seal'\n PARENTS : { ShippingInstructionsNotification: {maxLength: 4096}, TransportDocumentNotification: {maxLength: 4096}, BookingNotification: {maxLength: 4096}, ArrivalNoticeNotification: {maxLength: 4096}, Seal: {enum: ['CAR', 'SHI', 'VET', 'CUS'] } },\n DEFAULT : { type: 'string' },\n },\n SpecificUnits: {\n DEFAULT : { type: 'object', title: 'Specific Units (for load and discharge)', CHILDREN: ['loadUnits', 'dischargeUnits'] },\n },\n specialCertificateNumber: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { type: 'string', maxLength: 255 },\n },\n specversion: {\n PARENTS : DCSA_CLOUDEVENT_GROUP,\n DEFAULT : { type: 'string', enum: ['1.0'], pseudoEnum: [] },\n },\n stateRegion: {\n PARENTS : { Address:{}, address: {}, AddressHBL: {}, PartyAddress: {}, City: {} },\n DEFAULT : { type: 'string', maxLength: 65 },\n },\n statusCode: {\n 'OVS_v3.0.2' : { PARENTS: { ErrorResponse: {}, TransportCall: { type: 'string', format: null, pseudoEnum: ['OMIT','BLNK','ADHO','PHOT','PHIN','SLID','ROTC','CUTR'], deprecated: true } }, },\n 'OVS_v3.0.1' : { PARENTS: { ErrorResponse: {}, TransportCall: { type: 'string', format: null, pseudoEnum: ['OMIT','BLNK','ADHO','PHOT','PHIN','SLID','ROTC','CUTR'], deprecated: true } }, },\n 'OVS_v3.0.0' : { PARENTS: { ErrorResponse: {}, TransportCall: { type: 'string', format: null, pseudoEnum: ['OMIT','BLNK','ADHO','PHOT','PHIN','SLID','ROTC','CUTR'] } }, },\n PARENTS : { ErrorResponse: {} },\n DEFAULT : { type: 'integer', format: 'int32' },\n },\n statusCodes: {\n DEFAULT : { type: 'array', items: { type: 'string', pseudoEnum: ['OMIT','BLNK','ADHO','PHOT','PHIN','SLID','ROTC','CUTR','DRYD','BUNK','OOSV'] } },\n },\n statusCodeMessage: {\n PARENTS : { ErrorResponse: {} },\n DEFAULT : { type: 'string', maxLength: 200 },\n },\n statusCodeText: {\n PARENTS : { ErrorResponse: {} },\n DEFAULT : { type: 'string', maxLength: 50 },\n },\n street: {\n 'OVS_v3.0.x' : { DEFAULT: { maxLength: 100 } },\n PARENTS : { Address: {}, address: {}, AddressHBL: {}, PartyAddress: {} },\n DEFAULT : { type: 'string', maxLength: 70 },\n },\n streetNumber: {\n PARENTS : { Address: {}, address: {}, AddressHBL: {}, PartyAddress: {} },\n DEFAULT : { type: 'string', maxLength: 50 },\n },\n subFacility: {\n DEFAULT : { type: 'string', pattern: '^\\\\S(?:.*\\\\S)?$', maxLength: 100},\n },\n subscriptionReference: {\n PARENTS : DCSA_CLOUDEVENT_GROUP,\n DEFAULT : { type: 'string', pattern: '^\\\\S(?:.*\\\\S)?$', maxLength: 100},\n },\n subsidiaryRisk1: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { type: 'string', minLength: 1, maxLength: 3, pattern: '^[0-9](\\\\.[0-9])?$' },\n },\n subsidiaryRisk2: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { type: 'string', minLength: 1, maxLength: 3, pattern: '^[0-9](\\\\.[0-9])?$' },\n },\n identificationNumber: {\n DEFAULT : { type: 'string', pattern: '^\\\\S(?:.*\\\\S)?$', maxLength: 17 },\n },\n SupportingDocument: {\n DEFAULT : { type: 'object', title: 'Supporting Document', required: ['name', 'content'] },\n },\n supportingDocuments: {\n DEFAULT : { type: 'array', items: {$ref: '#/components/schemas/DocumentMetadata'} },\n },\n SurrenderRequestAnswer: {\n DEFAULT : { type: 'object', title: 'Surrender Request Answer', required: ['surrenderRequestReference', 'action'] },\n },\n surrenderRequestCode: {\n DEFAULT : { type: 'string', enum: ['SREQ', 'AREQ'] },\n },\n SurrenderRequestDetails: {\n DEFAULT : { type: 'object', title: 'Surrender Request Details', required: ['surrenderRequestReference','transportDocumentReference','surrenderRequestCode'] },\n },\n // SurrenderRequestedBy should be deleted\n SurrenderRequestedBy: {\n DEFAULT : { type: 'object', title: 'Surrender Requested By', required: ['partyName', 'eblPlatform'] },\n },\n surrenderRequestReference: {\n DEFAULT : { type: 'string', maxLength: 100, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n tareWeight: {\n PARENTS : { Equipment: {}, RequestedEquipment: {}, RequestedEquipmentShipper: {}, RequiredEquipment: {} },\n DEFAULT : { $ref: '#/components/schemas/TareWeight' },\n },\n TareWeight: {\n DEFAULT : { type: 'object', title: 'Tare Weight', required: ['value','unit'], CHILDREN: ['value','unit'] },\n },\n tareWeightUnit: {\n PARENTS : { RequestedEquipment: {}, RequestedEquipmentShipper: {} },\n DEFAULT : { type: 'string', enum: ['KGM', 'LBR'] },\n },\n TaxLegalReference: {\n DEFAULT : { type: 'object', title: 'Tax & Legal Reference', required: ['type', 'countryCode', 'value'], CHILDREN: ['type','countryCode','value'] },\n },\n taxLegalReferences: {\n PARENTS : { BookingAgent: {}, Shipper: {}, ShipperShipper: {}, ShipperHBL: {}, Consignee: {}, ConsigneeShipper: {}, ConsigneeHBL: {}, Endorsee: {}, EndorseeShipper: {}, ServiceContractOwner: {}, Party: {}, PartyShipper: {}, PartyHBL: {}, IssuingParty: {}, IssueToParty: {}, ActorParty: {}, RecipientParty: {}, SurrenderRequestedBy: {}, NotifyParty: {}, NotifyPartyShipper: {}, NotifyPartyHBL: {}, Seller: {}, SellerHBL: {}, Buyer: {}, BuyerHBL: {} },\n DEFAULT : { type: 'array', items: {$ref: '#/components/schemas/TaxLegalReference'} },\n },\n technicalName: {\n PARENTS : { DangerousGoods: {} },\n DEFAULT : { type: 'string', maxLength: 250 },\n },\n temperatureSetpoint: {\n PARENTS : { ActiveReeferSettings: {} },\n DEFAULT : { type: 'number', format: 'float' },\n },\n temperatureUnit: {\n PARENTS : { ActiveReeferSettings: {}, Limits: {} },\n DEFAULT : { type: 'string', enum: ['CEL', 'FAH'] },\n },\n terminalCall: {\n DEFAULT : { $ref: '#/components/schemas/TerminalCall' },\n },\n TerminalCall: {\n DEFAULT : { type: 'object', title: 'Terminal Call', required: ['terminalCallID','portCallID','carrierServiceName','carrierServiceCode'], CHILDREN: ['terminalCallID','portCallID', 'terminalCallReference', 'terminalCallSequenceNumber','carrierServiceName','carrierServiceCode','universalServiceReference','carrierImportVoyageNumber','carrierExportVoyageNumber','universalImportVoyageReference','universalExportVoyageReference','omitted','isFYI'] },\n },\n TerminalCalls: {\n DEFAULT : { type: 'array', items: { $ref: '#/components/schemas/TerminalCall' } },\n },\n terminalCallID: {\n DEFAULT : { type: 'string', format: 'uuid' },\n },\n terminalCallReference: {\n PARENTS : { TerminalCall: {} },\n DEFAULT : { type: 'string', maxLength: 100 },\n },\n terminalCallSequenceNumber: {\n DEFAULT : { type: 'integer', format: 'int32' },\n },\n TerminalTimestamp: {\n DEFAULT : { type: 'object', title: 'Terminal Timestamp', required: ['vesselOperatorSMDGLinerCode','timestampClassifierCode','timestampTypeCode','timestampPositionCode','timestampDateTime'] },\n },\n termsAndConditions: {\n PARENTS : { Booking: {}, booking: {}, amendedBooking: {}, TransportDocument: {}, transportDocument: {} },\n DEFAULT : { type: 'string', maxLength: 50000 },\n },\n time: {\n PARENTS : DCSA_CLOUDEVENT_GROUP,\n DEFAULT : { type: 'string', format: 'date-time'},\n },\n Timestamp: {\n 'OVS_HUB_TER_v1.0.x' : { DEFAULT: { required: ['typeCode', 'classifierCode', 'positionCode', 'dateTime'], CHILDREN: ['typeCode', 'classifierCode', 'positionCode', 'dateTime'] } },\n 'OVS_v3.0.x' : { DEFAULT: { required: ['eventClassifierCode', 'eventDateTime','eventTypeCode'], CHILDREN: ['eventTypeCode','eventClassifierCode','eventDateTime','delayReasonCode','delayReasonCodes','changeRemark', 'facilityTypeCode']} },\n 'JIT_v2.0.0' : { DEFAULT: { required: ['timestampID','portCallServiceID','classifierCode','dateTime'], CHILDREN: ['timestampID','replyToTimestampID','portCallServiceID','classifierCode','dateTime','portCallServiceLocation','delayReasonCode','remark','isFYI'] } },\n DEFAULT : { type: 'object', title: 'Timestamp', required: ['eventTypeCode', 'eventClassifierCode', 'eventDateTime'], CHILDREN: ['eventTypeCode','eventClassifierCode','eventDateTime'] },\n },\n timestampClassifierCode: {\n PARENTS : { TerminalTimestamp: {} },\n DEFAULT : { type: 'string', enum: ['ACT','EST'] },\n },\n timestampDateTime: {\n PARENTS : { TerminalTimestamp: {} },\n DEFAULT : { type: 'string', format: 'date-time' },\n },\n timestampPositionCode: {\n PARENTS : { TerminalTimestamp: {} },\n DEFAULT : { type: 'string', pseudoEnum: ['PBPL', 'BRTH', 'ANCH', 'PORT'] },\n },\n timestampID: {\n DEFAULT : { type: 'string', format: 'uuid' },\n },\n timestampPositionCode: {\n PARENTS : { TerminalTimestamp: {} },\n DEFAULT : { type: 'string', pseudoEnum: ['PBPL', 'BRTH', 'ANCH', 'PORT'] },\n },\n timestamps: {\n 'OVS_v3.0.x' : { DEFAULT: { type: 'array', minItems: null, items: {$ref: '#/components/schemas/Timestamp'} } },\n PARENTS : { TransportCall: {}, TerminalCall: {}, Schedule: {}, PortCallService: { minItems: null } },\n DEFAULT : { type: 'array', minItems: 1, items: {$ref: '#/components/schemas/Timestamp'} },\n },\n Timestamps: {\n DEFAULT : { type: 'array', items: { $ref: '#/components/schemas/Timestamp' } },\n },\n timestampTypeCode: {\n DEFAULT : { basedOn: 'eventTypeCode' },\n },\n totalUnits: {\n DEFAULT : { type: 'integer', format: 'int32', minimum: '0' },\n },\n TotalEmptyUnits: {\n DEFAULT : { type: 'object', title: 'Total Empty Units', additionalProperties: 'false', required: ['totalUnits'], CHILDREN: ['totalUnits'] },\n },\n TotalLadenUnits: {\n DEFAULT : { type: 'object', title: 'Total Laden Units (Dry)', additionalProperties: 'false', required: ['totalUnits'], CHILDREN: ['totalUnits'] },\n },\n TotalReeferPluggedUnits: {\n DEFAULT : { type: 'object', title: 'Total Reefer Plugged Units', additionalProperties: 'false', required: ['totalUnits'], CHILDREN: ['totalUnits'] },\n },\n TotalUnits: {\n DEFAULT : { type: 'object', title: 'Total Units (Dry + Reefer + OOG)', additionalProperties: 'false', required: ['totalUnits'], CHILDREN: ['totalUnits'] },\n },\n totalRestows: {\n DEFAULT : { type: 'integer', format: 'int32', minimum: '0' },\n },\n TotalRestows: {\n DEFAULT : { type: 'object', title: 'Total units to restow', additionalProperties: 'false', required: ['totalRestows'], CHILDREN: ['totalRestows'] },\n },\n ActorParty: {\n DEFAULT : { type: 'object', title: 'Actor Party', required: ['partyName', 'eblPlatform', 'identifyingCodes'] },\n },\n RecipientParty: {\n DEFAULT : { type: 'object', title: 'Recipient Party', required: ['partyName', 'eblPlatform', 'identifyingCodes'] },\n },\n Transaction: {\n DEFAULT : { type: 'object', title: 'Transaction', required: ['actionCode','actor','actionDateTime'], CHILDREN: ['actionCode','actor','recipient','actionDateTime','reasonCode','comments','auditReference'] },\n },\n transactions: {\n DEFAULT : { type: 'array', minItems: 1, items: {$ref: '#/components/schemas/Transaction'} },\n },\n transitTime: {\n DEFAULT : { type: 'integer', format: 'int32' },\n },\n transport: {\n PARENTS : { Leg: {} },\n DEFAULT : { },\n },\n Transport: {\n DEFAULT : { type: 'object', title: 'Transport', required: ['transportPlanStage', 'transportPlanStageSequenceNumber', 'loadLocation', 'dischargeLocation', 'plannedDepartureDate', 'plannedArrivalDate'], CHILDREN: ['transportPlanStage','transportPlanStageSequenceNumber','loadLocation','dischargeLocation','plannedDepartureDate','plannedArrivalDate','modeOfTransport','vesselName','vesselIMONumber','carrierServiceCode','universalServiceReference','carrierImportVoyageNumber','universalImportVoyageReference','carrierExportVoyageNumber','universalExportVoyageReference'] },\n },\n transportCall: {\n DEFAULT : { $ref: '#/components/schemas/TransportCall' },\n },\n TransportCall: {\n 'OVS_HUB_TER_v1.0.x' : { DEFAULT: { required: ['carrierImportVoyageNumber','transportCallReference', 'timestamps'], CHILDREN: ['portVisitReference','transportCallReference','carrierImportVoyageNumber','carrierExportVoyageNumber','universalImportVoyageReference','universalExportVoyageReference','location','timestamps'] } },\n 'OVS_v3.0.2' : { DEFAULT: { type: 'object', title: 'Transport Call', required: ['carrierImportVoyageNumber','transportCallReference'], CHILDREN: ['portVisitReference','transportCallReference','carrierImportVoyageNumber','carrierExportVoyageNumber','universalImportVoyageReference','universalExportVoyageReference','location','statusCode','statusCodes','timestamps'] } },\n 'OVS_v3.0.1' : { DEFAULT: { type: 'object', title: 'Transport Call', required: ['carrierImportVoyageNumber','transportCallReference'], CHILDREN: ['portVisitReference','transportCallReference','carrierImportVoyageNumber','carrierExportVoyageNumber','universalImportVoyageReference','universalExportVoyageReference','location','statusCode','statusCodes','timestamps'] } },\n 'OVS_v3.0.0' : { DEFAULT: { type: 'object', title: 'Transport Call', required: ['carrierImportVoyageNumber','transportCallReference'], CHILDREN: ['portVisitReference','transportCallReference','carrierImportVoyageNumber','carrierExportVoyageNumber','universalImportVoyageReference','universalExportVoyageReference','location','statusCode','timestamps'] } },\n 'JIT_v2.0.0' : { DEFAULT: { type: 'object', title: 'Transport Call', required: ['transportCallID'], CHILDREN: ['transportCallID', 'transportCallReference', 'transportCallSequenceNumber','carrierImportVoyageNumber','carrierExportVoyageNumber','universalImportVoyageReference','universalExportVoyageReference','omitted'] } },\n DEFAULT : { type: 'object', title: 'Transport Call', required: ['transportCallReference', 'carrierImportVoyageNumber', 'timestamps'], CHILDREN: ['portVisitReference','transportCallReference','carrierImportVoyageNumber','carrierExportVoyageNumber','universalImportVoyageReference','universalExportVoyageReference','cutOffTimes','location','timestamps'] },\n },\n transportCallID: {\n DEFAULT : { type: 'string', format: 'uuid' },\n },\n transportCallReference: {\n 'OVS_HUB_TER_v1.0.0' : { DEFAULT: { pseudoEnum: [] } },\n PARENTS : { IntermediateCall: {}, TerminalTimestamp: {}, TerminalCall: {}, TransportCall: {}, VesselTransport: { deprecated: true }, BargeTransport: { deprecated: true }, PlaceOfArrival: {}, PlaceOfDeparture: {} },\n DEFAULT : { type: 'string', maxLength: 100 },\n },\n TransportCallLocation: {\n DEFAULT : { type: 'object', title: 'TransportCall Location', CHILDREN: ['locationName','facilityName','address','addressLines','UNLocationCode','facilitySMDGCode'] },\n },\n transportCalls: {\n 'OVS_HUB_TER_v1.0.x' : { DEFAULT: { minItems: 1 } },\n PARENTS : { VesselSchedule: {} },\n DEFAULT : { type: 'array', items: { $ref: '#/components/schemas/TransportCall' } },\n },\n transportCallSequenceNumber: {\n DEFAULT : { type: 'integer', format: 'int32' },\n },\n transportControlTemperature: {\n PARENTS : { Limits: {} },\n DEFAULT : { type: 'number', format: 'float' },\n },\n TransportDocument: {\n 'EBL_PINT_v3.0.0' : { DEFAULT: { $ref: '#/components/schemas/TransportDocument' } },\n 'EBL_v3.0.4' : { DEFAULT: { CHILDREN: ['transportDocumentReference','transportDocumentSubReference','shippingInstructionsReference','transportDocumentStatus','transportDocumentTypeCode','isShippedOnBoardType','freightPaymentTermCode','isElectronic','isToOrder','numberOfCopiesWithCharges','numberOfCopiesWithoutCharges','numberOfOriginalsWithCharges','numberOfOriginalsWithoutCharges','displayedNameForPlaceOfReceipt','displayedNameForPortOfLoad','displayedNameForPortOfDischarge','displayedNameForPlaceOfDelivery','shippedOnBoardDate','displayedShippedOnBoardReceivedForShipment','termsAndConditions','receiptTypeAtOrigin','deliveryTypeAtDestination','cargoMovementTypeAtOrigin','cargoMovementTypeAtDestination','issueDate','receivedForShipmentDate','serviceContractReference','contractQuotationReference','extendedContractQuotationReference','declaredValue','declaredValueCurrency','carrierCode','carrierCodeListProvider','carrierClauses','numberOfRiderPages','transports','charges','placeOfIssue','invoicePayableAt','partyContactDetails','documentParties','consignmentItems','utilizedTransportEquipments','exportLicense','importLicense','references','customsReferences','feedbacks'] } },\n 'EBL_v3.0.3' : { DEFAULT: { CHILDREN: ['transportDocumentReference','transportDocumentSubReference','shippingInstructionsReference','transportDocumentStatus','transportDocumentTypeCode','isShippedOnBoardType','freightPaymentTermCode','isElectronic','isToOrder','numberOfCopiesWithCharges','numberOfCopiesWithoutCharges','numberOfOriginalsWithCharges','numberOfOriginalsWithoutCharges','displayedNameForPlaceOfReceipt','displayedNameForPortOfLoad','displayedNameForPortOfDischarge','displayedNameForPlaceOfDelivery','shippedOnBoardDate','displayedShippedOnBoardReceivedForShipment','termsAndConditions','receiptTypeAtOrigin','deliveryTypeAtDestination','cargoMovementTypeAtOrigin','cargoMovementTypeAtDestination','issueDate','receivedForShipmentDate','serviceContractReference','contractQuotationReference','declaredValue','declaredValueCurrency','carrierCode','carrierCodeListProvider','carrierClauses','numberOfRiderPages','transports','charges','placeOfIssue','invoicePayableAt','partyContactDetails','documentParties','consignmentItems','utilizedTransportEquipments','exportLicense','importLicense','references','customsReferences','feedbacks'] } },\n 'EBL_v3.0.2' : { DEFAULT: { CHILDREN: ['transportDocumentReference','transportDocumentSubReference','shippingInstructionsReference','transportDocumentStatus','transportDocumentTypeCode','isShippedOnBoardType','freightPaymentTermCode','isElectronic','isToOrder','numberOfCopiesWithCharges','numberOfCopiesWithoutCharges','numberOfOriginalsWithCharges','numberOfOriginalsWithoutCharges','displayedNameForPlaceOfReceipt','displayedNameForPortOfLoad','displayedNameForPortOfDischarge','displayedNameForPlaceOfDelivery','shippedOnBoardDate','displayedShippedOnBoardReceivedForShipment','termsAndConditions','receiptTypeAtOrigin','deliveryTypeAtDestination','cargoMovementTypeAtOrigin','cargoMovementTypeAtDestination','issueDate','receivedForShipmentDate','serviceContractReference','contractQuotationReference','declaredValue','declaredValueCurrency','carrierCode','carrierCodeListProvider','carrierClauses','numberOfRiderPages','transports','charges','placeOfIssue','invoicePayableAt','partyContactDetails','documentParties','consignmentItems','utilizedTransportEquipments','exportLicense','importLicense','references','customsReferences','feedbacks'] } },\n DEFAULT : { type: 'object', title: 'Transport Document', required: ['transportDocumentReference', 'transportDocumentStatus', 'transportDocumentTypeCode', 'isShippedOnBoardType', 'isElectronic', 'isToOrder', 'invoicePayableAt', 'partyContactDetails', 'documentParties', 'consignmentItems', 'utilizedTransportEquipments', 'termsAndConditions', 'receiptTypeAtOrigin', 'deliveryTypeAtDestination', 'cargoMovementTypeAtOrigin', 'cargoMovementTypeAtDestination', 'carrierCode', 'carrierCodeListProvider', 'transports'], CHILDREN: ['transportDocumentReference','transportDocumentSubReference','shippingInstructionsReference','transportDocumentStatus','transportDocumentTypeCode','isShippedOnBoardType','freightPaymentTermCode','isElectronic','isToOrder','numberOfCopiesWithCharges','numberOfCopiesWithoutCharges','numberOfOriginalsWithCharges','numberOfOriginalsWithoutCharges','displayedNameForPlaceOfReceipt','displayedNameForPortOfLoad','displayedNameForPortOfDischarge','displayedNameForPlaceOfDelivery','shippedOnBoardDate','displayedShippedOnBoardReceivedForShipment','termsAndConditions','receiptTypeAtOrigin','deliveryTypeAtDestination','cargoMovementTypeAtOrigin','cargoMovementTypeAtDestination','issueDate','receivedForShipmentDate','serviceContractReference','contractQuotationReference','extendedContractQuotationReference','declaredValue','declaredValueCurrency','carrierCode','carrierCodeListProvider','carrierClauses','numberOfRiderPages','transports','charges','placeOfIssue','invoicePayableAt','partyContactDetails','documentParties','consignmentItems','utilizedTransportEquipments','exportLicense','importLicense','references','customsReferences'] },\n },\n transportDocument: {\n PARENTS : { TransportDocumentData: {}, EblEnvelope: {$ref: '#/components/schemas/TransportDocument'} },\n DEFAULT : { $ref: '#/components/schemas/TransportDocumentFullNotification' }\n },\n TransportDocumentAmend: {\n DEFAULT : { type: 'object', title: 'Transport Document (Amend)', required: ['amendedTransportDocumentStatus', 'amendedTransportDocument'], CHILDREN: ['amendedTransportDocumentStatus', 'amendedTransportDocument'] },\n },\n transportDocumentChecksum: {\n DEFAULT : { type: 'string', minLength: 64, maxLength: 64, pattern: '^[0-9a-f]+$' },\n },\n TransportDocumentData: {\n DEFAULT : { type: 'object', title: 'Transport Document Data', required: ['transportDocumentStatus', 'transportDocumentReference'], CHILDREN: ['transportDocumentStatus', 'amendedTransportDocumentStatus', 'shippingInstructionsReference', 'transportDocumentReference','transportDocumentSubReference', 'feedbacks', 'transportDocument', 'amendedTransportDocument'] },\n },\n TransportDocumentFullNotification: {\n DEFAULT : { type: 'object', title: 'Transport Document Full Notification', allOf: true },\n },\n TransportDocumentRefStatus: {\n DEFAULT : { type: 'object', title: 'Transport Document Response', required: ['transportDocumentReference', 'transportDocumentStatus'] },\n },\n TransportDocumentRelation: {\n DEFAULT : { type: 'object', title: 'Transport Document Relation', required: ['transportDocumentReference'], CHILDREN: ['transportDocumentReference', 'transportDocumentSubReference'] },\n },\n transportDocumentReplacements: {\n DEFAULT : { $ref: '#/components/schemas/TransportDocumentReplacements' }\n },\n TransportDocumentReplacements: {\n DEFAULT : { type: 'object', title: 'Transport Document Replacements', CHILDREN: ['oldTransportDocumentReferences', 'newTransportDocumentReferences'] },\n },\n TransportDocumentNotification: {\n DEFAULT : { type: 'object', title: 'Transport Document Notification', required: ['specversion', 'id', 'source', 'type', 'time', 'datacontenttype', 'subscriptionReference', 'data'] },\n },\n transportDocumentReference: {\n 'BKG_v2.0.0' : {type: 'string', maxLength: 20, pattern: '^\\\\S(?:.*\\\\S)?$' },\n 'BKG_v2.0.1' : {type: 'string', maxLength: 20, pattern: '^\\\\S(?:.*\\\\S)?$' },\n PARENTS : { TransportDocumentRelation: {}, EndorsementChain: {}, ShippingInstructions: {}, shippingInstructions: {}, CreateShippingInstructions: {}, UpdateShippingInstructions: {}, updatedShippingInstructions: {}, ShippingInstructionsRefStatus: {}, ShippingInstructionsRefCancelStatus: {}, CreateBooking: { deprecated: true }, UpdateBooking: { deprecated: true }, Booking: { deprecated: true }, booking: {}, amendedBooking: {}, TransportDocument: {}, transportDocument: {}, TransportDocumentRefStatus: {}, IssuanceResponse: {}, SurrenderRequestAcknowledgement: {}, ShippingInstructionsData: {}, SurrenderRequestDetails: {}, TransportDocumentData: {} },\n DEFAULT : { type: 'string', maxLength: 20, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n transportDocumentReferences: {\n DEFAULT : { type: 'array', items: { type: 'string', maxLength: 20, pattern: '^\\\\S(?:.*\\\\S)?$' } },\n },\n transportDocumentSubReference: {\n PARENTS : { TransportDocumentRelation: {}, EndorsementChain: {}, ShippingInstructions: {}, shippingInstructions: {}, updatedShippingInstructions: {}, ShippingInstructionsRefStatus: {}, ShippingInstructionsRefCancelStatus: {}, CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {}, TransportDocument: {}, transportDocument: {}, TransportDocumentRefStatus: {}, IssuanceResponse: {}, SurrenderRequestAcknowledgement: {}, ShippingInstructionsData: {}, SurrenderRequestDetails: {}, TransportDocumentData: {} },\n DEFAULT : { type: 'string', maxLength: 100, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n transportDocumentStatus: {\n PARENTS : { ApproveTransportDocument: { pseudoEnum: [] }, TransportDocument: {}, transportDocument: {}, TransportDocumentRefStatus: {}, TransportDocumentData: {} },\n DEFAULT : { type: 'string', maxLength: 50, pseudoEnum: ['DRAFT','APPROVED','ISSUED','PENDING_SURRENDER_FOR_AMENDMENT','SURRENDERED_FOR_AMENDMENT','VOIDED','PENDING_SURRENDER_FOR_DELIVERY','SURRENDERED_FOR_DELIVERY'] },\n },\n transportDocumentTypeCode: {\n PARENTS : { CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {}, CreateShippingInstructions: {}, UpdateShippingInstructions: {}, ShippingInstructions: {}, updatedShippingInstructions: {}, shippingInstructions: {}, TransportDocument: {}, transportDocument: {} },\n DEFAULT : { type: 'string', enum: ['BOL', 'SWB'] },\n },\n transportEmergencyTemperature: {\n PARENTS : { Limits: {} },\n DEFAULT : { type: 'number', format: 'float' },\n },\n transportPlan: {\n PARENTS : { Booking: {}, booking: {}, amendedBooking: {} },\n DEFAULT : { type: 'array', items: {$ref: '#/components/schemas/Transport'} },\n },\n transportPlanStage: {\n PARENTS : { Transport: {} },\n DEFAULT : { type: 'string', enum: ['PRC', 'MNC', 'ONC'] },\n },\n transportPlanStageSequenceNumber: {\n PARENTS : { Transport: {} },\n DEFAULT : { type: 'integer', format: 'int32' },\n },\n transports: {\n DEFAULT : { $ref: '#/components/schemas/Transports' },\n },\n Transports: {\n DEFAULT : { type: 'object', title: 'Transports', required: ['plannedArrivalDate', 'plannedDepartureDate', 'portOfLoading', 'portOfDischarge', 'vesselVoyages'], CHILDREN: ['plannedArrivalDate','plannedDepartureDate','preCarriageBy','onCarriageBy','placeOfReceipt','portOfLoading','portOfDischarge','placeOfDelivery','onwardInlandRouting','vesselVoyages'] },\n },\n type: {\n 'BKG_v2.0.x' : { PARENTS: {\n BookingNotification: {enum: ['org.dcsa.booking.v2'], pseudoEnum: [] },\n CustomsReference: {maxLength: 50, pattern: '^\\\\S(?:.*\\\\S)?$'},\n TaxLegalReference: {maxLength: 50, pattern: '^\\\\S(?:.*\\\\S)?$'},\n ReferenceShipper: {maxLength: 3, pseudoEnum: ['CR','AKG','AEF'] },\n Reference: {maxLength: 3, pseudoEnum: ['CR','ECR','AKG','AEF'] },\n NationalCommodityCode: {maxLength: 10, pattern: '^\\\\S(?:.*\\\\S)?$', pseudoEnum:['NCM','HTS','SCHEDULE_B','TARIC','CN','CUS'] },\n ExtendedNationalCommodityCode: {maxLength: 10, pattern: '^\\\\S(?:.*\\\\S)?$', pseudoEnum:['NCM','HTS','SCHEDULE_B','TARIC','CN','CUS'] },\n } },\n// 'BKG_v2.0.1' : { PARENTS: {\n// BookingNotification: {enum: ['org.dcsa.booking.v2'], pseudoEnum: [] },\n// CustomsReference: {maxLength: 50, pattern: '^\\\\S(?:.*\\\\S)?$'},\n// TaxLegalReference: {maxLength: 50, pattern: '^\\\\S(?:.*\\\\S)?$'},\n// ReferenceShipper: {maxLength: 3, pseudoEnum: ['CR','AKG','AEF'] },\n// Reference: {maxLength: 3, pseudoEnum: ['CR','ECR','AKG','AEF'] },\n// NationalCommodityCode: {maxLength: 10, pattern: '^\\\\S(?:.*\\\\S)?$', pseudoEnum:['NCM','HTS','SCHEDULE_B','TARIC','CN','CUS'] },\n// } },\n// 'BKG_v2.0.2' : { PARENTS: {\n// BookingNotification: {enum: ['org.dcsa.booking.v2'], pseudoEnum: [] },\n// CustomsReference: {maxLength: 50, pattern: '^\\\\S(?:.*\\\\S)?$'},\n// TaxLegalReference: {maxLength: 50, pattern: '^\\\\S(?:.*\\\\S)?$'},\n// ReferenceShipper: {maxLength: 3, pseudoEnum: ['CR','AKG','AEF'] },\n// Reference: {maxLength: 3, pseudoEnum: ['CR','ECR','AKG','AEF'] },\n// NationalCommodityCode: {maxLength: 10, pattern: '^\\\\S(?:.*\\\\S)?$', pseudoEnum:['NCM','HTS','SCHEDULE_B','TARIC','CN','CUS'] },\n// } },\n PARENTS : { \n CustomsReference: {maxLength: 50, pattern: '^\\\\S(?:.*\\\\S)?$'},\n Reference: {maxLength: 3, pseudoEnum: ['CR','AKG'] },\n ReferenceConsignmentItem: {maxLength: 3, pseudoEnum: ['CR','AKG','SPO','CPO'] },\n TaxLegalReference: {maxLength: 50, pattern: '^\\\\S(?:.*\\\\S)?$' },\n ArrivalNoticeNotification: {enum: ['org.dcsa.arrival-notice-notification.v1'], pseudoEnum: [] },\n TransportDocumentNotification: {enum: ['org.dcsa.transport-document.v3'], pseudoEnum: [] },\n ShippingInstructionsNotification: {enum: ['org.dcsa.shipping-instructions.v3'], pseudoEnum: [] },\n vessel: {enum: ['GCGO', 'CONT', 'RORO', 'CARC', 'PASS', 'FERY', 'BULK', 'TANK', 'LGTK', 'ASSI', 'PILO'] },\n NationalCommodityCode: {maxLength: 10, pattern: '^\\\\S(?:.*\\\\S)?$', pseudoEnum:['NCM','HTS','SCHEDULE_B','TARIC','CN','CUS'] },\n ExtendedNationalCommodityCode: {maxLength: 10, pattern: '^\\\\S(?:.*\\\\S)?$', pseudoEnum:['NCM','HTS','SCHEDULE_B','TARIC','CN','CUS'] },\n },\n DEFAULT : { type: 'string' },\n },\n typeCode: {\n 'OVS_HUB_TER_v1.0.x' : { DEFAULT: { enum: ['ARRI', 'DEPA'] } },\n PARENTS : { Vessel: { enum: ['GCGO', 'CONT', 'RORO', 'CARC', 'PASS', 'FERY', 'BULK', 'TANK', 'LGTK', 'ASSI', 'PILO'] } },\n DEFAULT : { type: 'string' },\n },\n typeOfPerson: {\n DEFAULT : { type: 'string', maxLength: 50, pattern: '^\\\\S(?:.*\\\\S)?$', pseudoEnum: ['NATURAL_PERSON','LEGAL_PERSON','ASSOCIATION_OF_PERSONS'] },\n },\n unit: {\n PARENTS : { \n CargoGrossWeight: {enum: ['KGM', 'LBR']},\n CargoNetWeight: {enum: ['KGM', 'LBR']},\n TareWeight: {enum: ['KGM', 'LBR']}, \n CargoNetVolume: {enum: ['MTQ', 'FTQ']}, \n CargoGrossVolume: {enum: ['MTQ', 'FTQ']}, \n NetVolume: {enum: ['MTQ', 'FTQ', 'LTR']}, \n CargoNetVolume: {enum: ['MTQ', 'FTQ']}, \n CargoGrossWeight: {enum: ['KGM', 'LBR']}, \n CargoGrossWeightReq: {enum: ['KGM', 'LBR']}, \n GrossWeight: {enum: ['KGM', 'LBR']}, \n CargoNetWeight: {enum: ['KGM', 'LBR']}, \n NetWeight: {enum: ['KGM', 'LBR']}, \n NetExplosiveContent: {enum: ['KGM', 'LBR', 'GRM', 'ONZ']} },\n DEFAULT : { type: 'string' },\n },\n units: {\n PARENTS : { ConfirmedEquipment: {}, RequestedEquipment: {}, RequestedEquipmentShipper: {} },\n DEFAULT : { type: 'integer', format: 'int32', minimum: 1 },\n },\n unitPrice: {\n PARENTS : { Charge: {} },\n DEFAULT : { type: 'number', format: 'float', minimum: '0' },\n },\n universalExportVoyageReference: {\n 'OVS_v3.0.x' : { DEFAULT: { type: 'string', minLength: null, maxLength: null, pattern: '^\\\\d{2}[0-9A-Z]{2}[NEWSR]$', pseudoEnum: [] } },\n PARENTS : { TerminalTimestamp: {}, CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {}, Transport: {}, VesselVoyage: {}, Schedule: {}, TerminalCall: {}, TransportCall: {}, VesselTransport: {}, BargeTransport: {}, departingVesselVoyage: {} },\n DEFAULT : { type: 'string', minLength: 5, maxLength: 5, pattern: '^\\\\d{2}[0-9A-Z]{2}[NEWSR]$', pseudoEnum: [] },\n },\n universalImportVoyageReference: {\n 'OVS_v3.0.x' : { DEFAULT: { type: 'string', minLength: null, maxLength: null, pattern: '^\\\\d{2}[0-9A-Z]{2}[NEWSR]$', pseudoEnum: [] } },\n PARENTS : { TerminalTimestamp: {}, Transport: {}, Schedule: {}, TerminalCall: {}, TransportCall: {}, VesselTransport: {}, BargeTransport: {} },\n DEFAULT : { type: 'string', minLength: 5, maxLength: 5, pattern: '^\\\\d{2}[0-9A-Z]{2}[NEWSR]$', pseudoEnum: [] },\n },\n universalServiceReference: {\n 'OVS_v3.0.x' : { DEFAULT: { type: 'string', minLength: null, maxLength: 8, pattern: '^SR\\\\d{5}[A-Z]$' } },\n PARENTS : { TerminalTimestamp: {}, TerminalCall: {}, CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {}, Transport: {}, Schedule: {}, ServiceSchedule: {}, VesselTransport: {}, BargeTransport: {}, departingVesselVoyage: { pseudoEnum: [] } },\n DEFAULT : { type: 'string', minLength: 8, maxLength: 8, pattern: '^SR\\\\d{5}[A-Z]$' },\n },\n UNLocationCode: {\n DEFAULT : { type: 'string', minLength: 5, maxLength: 5, pattern: '^[A-Z]{2}[A-Z2-9]{3}$', pseudoEnum: [] },\n },\n UNLocationLocation: {\n 'OVS_v3.0.x' : { DEFAULT: { type: 'object', title: 'UN Location', required: ['UNLocationCode','locationType'] } },\n },\n UNNumber: {\n DEFAULT : { type: 'string', minLength: 4, maxLength: 4, pattern: '^\\\\d{4}$' },\n },\n UpdateBooking: {\n DEFAULT : { type: 'object', title: 'Update Booking', required: ['receiptTypeAtOrigin', 'deliveryTypeAtDestination', 'cargoMovementTypeAtOrigin', 'cargoMovementTypeAtDestination', 'isEquipmentSubstitutionAllowed', 'shipmentLocations', 'requestedEquipments', 'documentParties'] },\n },\n UpdateShippingInstructions: {\n DEFAULT : { type: 'object', title: 'Update Shipping Instructions', required: ['shippingInstructionsReference', 'transportDocumentTypeCode', 'isShippedOnBoardType', 'isElectronic', 'isToOrder', 'freightPaymentTermCode', 'partyContactDetails', 'documentParties', 'isCargoDeliveredInICS2Zone', 'consignmentItems', 'utilizedTransportEquipments'] },\n },\n updatedShippingInstructions: {\n PARENTS : { ShippingInstructionsData: {} },\n DEFAULT : { $ref: '#/components/schemas/UpdatedShippingInstructionsFullNotification' },\n },\n UpdatedShippingInstructionsFullNotification: {\n DEFAULT : { type: 'object', title: 'Updated Shipping Instructions', allOf: true },\n },\n updatedShippingInstructionsStatus: {\n PARENTS : { CancelShippingInstructionsUpdate: { pseudoEnum: [] }, ShippingInstructions: {}, shippingInstructions: {}, updatedShippingInstructions: {}, ShippingInstructionsRefStatus: {}, ShippingInstructionsRefCancelStatus: {}, ShippingInstructionsData: {} },\n DEFAULT : { type: 'string', maxLength: 50, pseudoEnum: ['UPDATE_RECEIVED','UPDATE_CONFIRMED','UPDATE_CANCELLED','UPDATE_DECLINED'] },\n },\n UTEquipment: {\n DEFAULT : { type: 'object', title: 'Shipper Owned Equipment (SoC)', required: ['isShipperOwned', 'equipment'], CHILDREN: ['isShipperOwned','equipment'] },\n },\n UTEquipmentReference: {\n DEFAULT : { type: 'object', title: 'Carrier Owned Equipment', required: ['isShipperOwned', 'equipmentReference'], CHILDREN:['isShipperOwned','equipmentReference'] },\n },\n UtilizedTransportEquipment: {\n DEFAULT : { type: 'object', title: 'Utilized Transport Equipment', required: ['equipment', 'isShipperOwned', 'seals'], CHILDREN: ['equipment','isShipperOwned','isNonOperatingReefer','activeReeferSettings','shippingMarks','seals','references','customsReferences'] },\n },\n utilizedTransportEquipments: {\n PARENTS : { HouseBillOfLading: {items: {$ref: '#/components/schemas/UtilizedTransportEquipmentHBL'}}, CreateShippingInstructions: {items: {$ref: '#/components/schemas/UtilizedTransportEquipmentShipper'}}, UpdateShippingInstructions: {items: {$ref: '#/components/schemas/UtilizedTransportEquipmentShipper'}}, ShippingInstructions: {items: {$ref: '#/components/schemas/UtilizedTransportEquipmentShipper'}}, shippingInstructions: {items: {$ref: '#/components/schemas/UtilizedTransportEquipmentShipper'}}, updatedShippingInstructions: {items: {$ref: '#/components/schemas/UtilizedTransportEquipmentShipper'}}, TransportDocument: {items: {$ref: '#/components/schemas/UtilizedTransportEquipment'} }, transportDocument: { items: {$ref: '#/components/schemas/UtilizedTransportEquipment'} } },\n DEFAULT : { type: 'array', minItems: 1 },\n },\n UtilizedTransportEquipmentHBL: {\n DEFAULT : { type: 'object', title: 'Utilized Transport Equipment (House B/L)', required: ['emptyIndicatorCode','isShipperOwned','equipmentReference','ISOEquipmentCode'], oneOf: true, CHILDREN: ['seals','emptyIndicatorCode','isShipperOwned','equipmentReference','ISOEquipmentCode']},\n },\n UtilizedTransportEquipmentShipper: {\n DEFAULT : { type: 'object', title: 'Utilized Transport Equipment (Shipper)', required: ['seals'], oneOf: true, CHILDREN: ['shippingMarks','seals','emptyIndicatorCode','references','customsReferences']},\n },\n value: {\n PARENTS : {\n TareWeight: {type: 'number', format: 'float', minimum: '0', exclusiveMinimum: 'true'}, \n CargoGrossVolume: {type: 'number', format: 'float', minimum: '0', exclusiveMinimum: 'true'}, \n CargoNetVolume: {type: 'number', format: 'float', minimum: '0', exclusiveMinimum: 'true'},\n NetVolume: {type: 'number', format: 'float', minimum: '0', exclusiveMinimum: 'true'},\n CargoGrossWeightReq: {type: 'number', format: 'float', minimum: '0', exclusiveMinimum: 'true'}, \n CargoNetWeight: {type: 'number', format: 'float', minimum: '0', exclusiveMinimum: 'true'}, \n CargoGrossWeight: {type: 'number', format: 'float', minimum: '0', exclusiveMinimum: 'true'}, \n GrossWeight: {type: 'number', format: 'float', minimum: '0', exclusiveMinimum: 'true'}, \n CargoNetWeight: {type: 'number', format: 'float', minimum: '0', exclusiveMinimum: 'true'}, \n NetWeight: {type: 'number', format: 'float', minimum: '0', exclusiveMinimum: 'true'}, \n NetExplosiveContent: {type: 'number', format: 'float', minimum: '0', exclusiveMinimum: 'true'}, \n DetailedError: { type: 'string', maxLength: 500 },\n errors: {type: 'string', maxLength: 500}, \n TaxLegalReference: {type: 'string', maxLength: 35, pattern: '^\\\\S(?:.*\\\\S)?$'}, \n Reference: {type: 'string', maxLength: 35, pattern: '^\\\\S(?:.*\\\\S)?$'},\n ReferenceShipper: {type: 'string', maxLength: 35, pattern: '^\\\\S(?:.*\\\\S)?$'}, \n },\n },\n values: {\n PARENTS : { \n NationalCommodityCode: {}, \n ExtendedNationalCommodityCode: { items: {type: 'string', maxLength: 16, pattern: '^\\\\S(?:.*\\\\S)?$' } }, \n CustomsReference: { items: {type: 'string', maxLength: 35, pattern: '^\\\\S(?:.*\\\\S)?$' } },\n ReferenceConsignmentItem: { items: {type: 'string', maxLength: 35, pattern: '^\\\\S(?:.*\\\\S)?$' } },\n },\n DEFAULT : { type: 'array', minItems: 1, items: {type: 'string', maxLength: 10, pattern: '^\\\\S(?:.*\\\\S)?$' } },\n },\n vessel: {\n 'CS_v1.0.x' : { DEFAULT: { type: null, title: null, required: null, CHILDREN: null, $ref: '#/components/schemas/Vessel' } },\n// 'CS_v1.0.1' : { DEFAULT: { type: null, title: null, required: null, CHILDREN: null, $ref: '#/components/schemas/Vessel' } },\n PARENTS : { PortCall: {}, CreateBooking: {}, UpdateBooking: {}, Booking: {}, booking: {}, amendedBooking: {} },\n DEFAULT : { $ref: '#/components/schemas/Vessel' },\n },\n Vessel: {\n 'JIT_v2.0.0' : { DEFAULT: { type: 'object', title: 'Vessel', CHILDREN: ['vesselIMONumber','MMSINumber','name','lengthOverall','width','dimensionUnit','callSign','typeCode'] } },\n 'BKG_v2.0.x' : { DEFAULT: { type: 'object', title: 'Vessel', required: ['name'], CHILDREN: ['name','vesselIMONumber'] } },\n// 'BKG_v2.0.1' : { DEFAULT: { type: 'object', title: 'Vessel', required: ['name'], CHILDREN: ['name','vesselIMONumber'] } },\n// 'BKG_v2.0.2' : { DEFAULT: { type: 'object', title: 'Vessel', required: ['name'], CHILDREN: ['name','vesselIMONumber'] } },\n DEFAULT : { type: 'object', title: 'Vessel', CHILDREN: ['vesselIMONumber','MMSINumber','name','flag','callSign','operatorCarrierCode','operatorCarrierCodeListProvider'] },\n },\n vesselCallSign: {\n 'OVS_v3.0.x' : { DEFAULT: { type: 'string', maxLength: 10, pattern: null }, PARENTs: { VesselSchedule: {} } },\n PARENTS : { VesselSchedule: {} },\n DEFAULT : { type: 'string', maxLength: 10, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n vesselCallSignNumber: {\n PARENTS : { VesselSchedule: {} },\n DEFAULT : { type: 'string', maxLength: 10 },\n },\n vesselIMONumber: {\n 'OVS_v3.0.x' : { DEFAULT: { type: 'string', minLength: null, maxLength: 7, pattern: '^\\\\d{7}$' }, PARENTs: { VesselSchedule: {} } },\n PARENTS : { TerminalTimestamp: {}, vessel: {}, Vessel: {}, Transport: {}, VesselVoyage: {}, Barge: {}, VesselSchedule: {}, departingVesselVoyage: {} },\n DEFAULT : { type: 'string', minLength: 7, maxLength: 8, pattern: '^\\\\d{7,8}$' },\n },\n vesselMMSINumber: {\n DEFAULT : { type: 'string', minLength: 9, maxLength: 9, pattern: '^\\\\d{9}$' },\n },\n vesselName: {\n 'OVS_v3.0.x' : { DEFAULT: { type: 'string', maxLength: 35, pattern: null, pseudoEnum: [] }, PARENTs: { VesselSchedule: {} } },\n PARENTS : { TerminalTimestamp: {}, Transport: {}, VesselVoyage: {}, VesselSchedule: {}, departingVesselVoyage: {} },\n DEFAULT : { type: 'string', maxLength: 50, pattern: '^\\\\S(?:.*\\\\S)?$' },\n },\n vesselOperatorCarrierCode: {\n PARENTS : { vessel: {nullable: 'false'}, Schedule: {}, VesselSchedule: {} },\n DEFAULT : { type: 'string', maxLength: 10 },\n },\n vesselOperatorSMDGLinerCode: {\n DEFAULT : { type: 'string', maxLength: 10 },\n },\n vesselOperatorCarrierCodeListProvider: {\n PARENTS : { vessel: {nullable: 'false'}, Schedule: {}, VesselSchedule: {} },\n DEFAULT : { type: 'string', enum: ['SMDG', 'NMFTA'] },\n },\n vesselPosition: {\n DEFAULT : { $ref: '#/components/schemas/VesselPosition' },\n },\n VesselPosition: {\n DEFAULT : { type: 'object', title: 'Vessel Position', CHILDREN: ['locationName','facility','UNLocationCode', 'geoCoordinate'] },\n },\n VesselSchedule: {\n 'OVS_HUB_TER_v1.0.x' : { DEFAULT: { required: ['vesselOperatorSMDGLinerCode', 'transportCalls'], CHILDREN: ['vesselOperatorSMDGLinerCode','vesselIMONumber','MMSINumber','vesselName','vesselCallSign','transportCalls'] } },\n 'OVS_v3.0.x' : { DEFAULT: { type: 'object', title: 'Vessel Schedule', required: ['isDummyVessel', 'vesselOperatorSMDGLinerCode'], CHILDREN: ['vesselOperatorSMDGLinerCode','vesselIMONumber','MMSINumber','vesselName','vesselCallSign','isDummyVessel','transportCalls'] } },\n DEFAULT : { type: 'object', title: 'Vessel Schedule', required: ['isDummyVessel'], CHILDREN: ['vessel','isDummyVessel','transportCalls'] },\n },\n vesselSchedules: {\n 'OVS_v3.0.x' : { PARENTS: { ServiceSchedule: { minItems: null, items: {$ref: '#/components/schemas/VesselSchedule'} } } },\n PARENTS : { ServiceSchedule: { minItems: 1, items: {$ref: '#/components/schemas/VesselSchedule'} }, PortSchedule: { items: { $ref: '#/components/schemas/Schedule' } } },\n DEFAULT : { type: 'array' },\n },\n VesselStatus: {\n DEFAULT : {type: 'object', title: 'Vessel Status', required: ['portCallServiceID'], CHILDREN: ['portCallServiceID', 'draft','airDraft','aftDraft','forwardDraft','dimensionUnit','vesselPosition','milesToDestinationPort','isFYI']}\n },\n VesselStatuses: {\n DEFAULT : { type: 'array', items: { $ref: '#/components/schemas/VesselStatus' } },\n },\n VesselTransport: {\n DEFAULT : { type: 'object', title: 'Vessel Transport', required: ['modeOfTransport'], CHILDREN: ['modeOfTransport','portVisitReference','transportCallReference','servicePartners','universalServiceReference','universalExportVoyageReference','universalImportVoyageReference','vessel'] },\n },\n VesselVoyage: {\n DEFAULT : { type: 'object', title: 'Vessel/Voyage', required: ['vesselName', 'carrierExportVoyageNumber'], CHILDREN: ['vesselName','carrierExportVoyageNumber','universalExportVoyageReference','role'] },\n },\n vesselVoyages: {\n DEFAULT : { type: 'array', minItems: 1, items: {$ref: '#/components/schemas/VesselVoyage'} },\n },\n weightUnit: {\n PARENTS : { Equipment: {}, RequiredEquipment: {} },\n DEFAULT : { type: 'string', enum: ['KGM', 'LBR'] },\n },\n width: {\n PARENTS : { Vessel: {} },\n DEFAULT : { type: 'number', format: 'float' }, // JIT\n },\n woodDeclaration: {\n PARENTS : { OuterPackaging: {}, OuterPackagingShipper: {} },\n DEFAULT : { type: 'string', maxLength: 30, pseudoEnum: ['NOT_APPLICABLE','NOT_TREATED_AND_NOT_CERTIFIED','PROCESSED','TREATED_AND_CERTIFIED'] },\n },\n};\n\n\n// Makes sure two arrays are equal if:\n// * they are the same array\n// * they have the same size\n// * items on each position in the list are the same\nfunction arraysEqual(a, b) {\n if (a === b) return true;\n if (a == null || b == null) return false;\n if (a.length !== b.length) return false;\n\n for (let i = 0; i < a.length; ++i) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n}\n\n// input: the property (Node) in the API to validate\n// propertyName: the name of the property being tested (can be a simpleType or an object)\n// attribute: the attribute to test (type, minLength, required, etc...) if specified correctly\n// requirements: the list of attributes that from the Spectral rule that is valid\n// results: an accumulated list of errors for a particular property\nfunction checkRequirement(input, propertyName, attribute, requirements, results) {\n // Checking 'enum' attribute\n if (attribute === 'enum') {\n // Check that enum values match (= are specified the same way...)\n const enumValuesRequired = requirements[attribute];\n const enumValues = input[attribute];\n if (!arraysEqual(enumValues, enumValuesRequired)) {\n // The two enum lists do not match - file an error\n results.push( { message: propertyName + `.` + attribute + ` value must equal: [` + enumValuesRequired + `], value provided: [` + enumValues + `]`, }, );\n }\n // Checking 'required' attribute\n } else if (attribute === 'required') {\n // Check that required lists match (= are specified the same way...)\n const requiredValues = requirements[attribute];\n const inputValues = input[attribute];\n if (!arraysEqual(inputValues, requiredValues)) {\n // The two required lists do not match - file an error\n results.push( { message: propertyName + `.` + attribute + ` value must equal: [` + requiredValues + `], value provided: [` + inputValues + `]`, }, );\n }\n\n // Check that required attributes are part of the Schema (if schema is updated without the required list being updated)\n if (requiredValues && requiredValues.length > 0) {\n if (!input.properties) {\n results.push( { message: propertyName + ` has required child-properties defined...`, }, );\n } else {\n for (let i = 0; i < requiredValues.length; ++i) {\n if (!input.properties[requiredValues[i]]) {\n results.push( { message: propertyName + ` HAS required property ` + requiredValues[i] + ` but it is missing as a child in the schema`, }, );\n }\n }\n }\n }\n // Checking 'items' attribute\n } else if (attribute === 'items') {\n if (input['items'] && requirements['items']) {\n // Check if a $ref MUST be used\n if (Object.keys(input['items']).length === 1 && input['items']['$ref']) {\n // the input contains a $ref\n if (requirements['items']['$ref'] !== input['items']['$ref']) {\n results.push( { message: propertyName + `.` + attribute + ` is defined as a $ref pointing to '` + input['items']['$ref'] + `' - but must be defined ` + (requirements['items']['$ref'] ? `as a $ref pointing to: ` + requirements['items']['$ref'] : `inline`), }, );\n }\n } else if (Object.keys(requirements['items']).length === 1 && requirements['items']['$ref']) {\n // the spec requires a $ref\n if (input['items']['$ref'] !== requirements['items']['$ref']) {\n results.push( { message: propertyName + `.` + attribute + ` is not defined as a $ref and MUST point to: ` + requirements['items']['$ref'], }, );\n }\n } else {\n // Multiple properties defined for an inline defined items\n for (const attribute2 of ATTRIBUTES_TO_CHECK) {\n checkRequirement(input.items, propertyName + '.items', attribute2, requirements.items, results)\n }\n\n // Check Enums and Pseudo-Enums\n checkEnumAndPseudoEnum(input.items, propertyName + '.items', requirements.items, results);\n\n }\n } else {\n if (input['items']) {\n // input.items is defined - but it is not part of the required properties\n results.push( { message: propertyName + `.` + attribute + ` value defined but shouldn't be according to the rules`, }, );\n } else if (requirements['items']) {\n // requirements.items is defined - but it is not part of the input properties\n results.push( { message: propertyName + `.` + attribute + ` value is missing - MUST be defined`, }, );\n }\n }\n } else if ((typeof input[attribute]) === 'boolean' || (typeof input[attribute]) === 'number') {\n // NOTE: It is IMPORTANT to convert to string before comparison otherwise boolean comparison will validate wrong\n if (String(requirements[attribute]) !== String(input[attribute])) {\n // The value provided and the value required does not match - file an error\n results.push( { message: propertyName + `.` + attribute + ` value must equal: ` + requirements[attribute] + `, value provided: ` + input[attribute], }, );\n }\n\n // Checking a specific attribute\n } else if (requirements[attribute] !== input[attribute]) {\n // The below line was wrongly included - it results in 2 errors in case e.g. Title from spec does not match the accepted value\n // results.push( { message: propertyName + `.` + attribute + ` TYPEOF INPUT VALUE IS: ` + (typeof input[attribute]), }, );\n\n // The value provided and the value required does not match - file an error\n results.push( { message: propertyName + `.` + attribute + ` value must equal: ` + requirements[attribute] + `, value provided: ` + input[attribute], }, );\n }\n\n // Make sure type attributes that are strings have example attribute value set\n if (attribute === 'type' && requirements[attribute] === \"string\") {\n if (!input['example'] || input['example'].length === 0){\n // Example value missing when type=string - file an error\n results.push( { message: propertyName + `.example attribute must be set with a value`, }, );\n } else if (input['format'] && input['format'] === 'date') {\n // Make sure the example contains an offset or is defined as UTC\n if (input['example'].match(/^.+((Z)|([\\+\\-])(\\d\\d):(\\d\\d))$/)) {\n results.push( { message: propertyName + `.example must not contain an offset or be a UTC date when format=date`, }, );\n }\n } else if (input['format'] && input['format'] === 'date-time') {\n // Make sure the example contains an offset or is defined as UTC\n if (!input['example'].match(/^.+((Z)|([\\+\\-])(\\d\\d):(\\d\\d))$/)) {\n results.push( { message: propertyName + `.example must contain an offset or be UTC if format=date-time`, }, );\n }\n } \n }\n}\n\n// Check two lists against each other and list the differences (disregarding order if items)\n// propertyName: the name of the property being tested (can be a simpleType or an object)\n// text: the text to test against (most likely the description field)\n// list: the list of items to check from the Spec\n// isEnum: used for presentation purposes - indicates if it is an enum or a pseudoEnum\n// results: an accumulated list of errors for a particular property\nfunction checkLists(propertyName, text, list, isEnum, results) {\n let match;\n const fullMatches = [];\n const matches = [];\n // Use a loop to find all matches\n\n // IMPORTANT: reset lastIndex because PSEUDO_ENUM_PATTERN is global (/g)\n PSEUDO_ENUM_PATTERN.lastIndex = 0;\n\n while ((match = PSEUDO_ENUM_PATTERN.exec(text)) !== null) {\n fullMatches.push(match[0]);\n matches.push(match[1]); // Add the first capturing group to the list\n if (false && 'transportDocumentStatus' === propertyName) {\n results.push( { message: propertyName + `.description FULL MATCHES ` + match[0], }, );\n results.push( { message: propertyName + `.description exact MATCHES ` + match[1], }, );\n }\n }\n\n var output = [];\n var formatList = [];\n outer:\n for (let k = 0; k < list.length; ++k) {\n for (let j = 0; j < matches.length; ++j) {\n if (matches[j] === list[k]) {\n if (!fullMatches[j].includes('- `' + list[k] + '`')) {\n formatList.push(list[k]);\n }\n fullMatches.splice(j, 1);\n matches.splice(j, 1);\n continue outer;\n }\n }\n output.push(list[k]);\n }\n\n if (output.length > 0) {\n results.push( { message: propertyName + `.description does not mention ` + (isEnum ? `Enum` : `PseudoEnum`) + ` value(s): [` + output + `]`, }, );\n }\n\n if (matches.length > 0) {\n if (isEnum) {\n results.push( { message: propertyName + `.description contains descriptions for the following Enum-values but they are missing in the Enum list: [` + matches + `]`, }, );\n } else {\n results.push( { message: propertyName + `.description contains descriptions for the following PseudoEnum-values but they are missing in the pseudoEnum-Spec list: [` + matches + `]`, }, );\n }\n }\n\n if (formatList.length > 0) {\n results.push( { message: propertyName + `.description does not follow the agreed pattern for presenting ` + (isEnum ? `an Enum` : `a PseudoEnum`) + `: [` + formatList + `]\\nShould follow the pattern: - \\`...\\` (...)`, }, );\n }\n}\n\nfunction checkEnumAndPseudoEnum(input, propertyName, spec, results) {\n // - Only check for String types\n if ((spec && spec.type && spec.type === 'string' && !spec.format) || (!(spec && spec.type) && input && input.type && input.type === 'string')) {\n if (spec && spec.pseudoEnum) {\n if (spec.pseudoEnum.length === 0) {\n // The description of the property contains PseudoEnum like text but is not a PseudoEnum\n // ** This allows a property description to match PsudeoEnum without being treated as one **\n } else {\n // The spec contains a pseudoEnum pattern that needs to be checked\n if (input && input.description) {\n const matches = input.description.match(PSEUDO_ENUM_PATTERN) || [];\n\n // This property contains PseudoEnum values - make sure they are all present in the description\n checkLists(propertyName, input.description, spec.pseudoEnum, false, results);\n }\n }\n } else {\n // Test the description for Enum or PseudoEnum values-descriptions\n if (input && input.description) {\n if (input.enum) {\n // Test if Enum values are mentioned in the description\n \n checkLists(propertyName, input.description, input.enum, true, results);\n } else {\n // Make sure no PseudoEnum are present in the description\n PSEUDO_ENUM_PATTERN.lastIndex = 0;\n if (PSEUDO_ENUM_PATTERN.test(input.description)) {\n results.push( { message: propertyName + `.description contains a 'PseudoEnum'-pattern but the property is not defined as one.\\nIf this is not a PseudoEnum then the spec must contain 'pseudoEnum: []'`, }, );\n }\n }\n }\n }\n }\n}\n\n// spec: the accumulated spec to validate against in all uses of a property\n// propertyName: the name of the property being tested (can be a simpleType or an object)\n// input: the property (Node) in the API to validate\n// results: an accumulated list of errors for a particular property\nfunction checkAttributeRequirements(spec, propertyName, input, results) {\n // Test valid $ref specifications\n if (input && Object.keys(input).length === 1 && input['$ref']) {\n // Make sure correct use of $ref is used\n if (spec && spec['$ref']) {\n if (spec['$ref'] !== input['$ref']) {\n results.push({ message: propertyName + ` - if not defined inline it MUST use a $ref pointing to: ` + spec['$ref'] + ` (currently pointing to: ` + input['$ref'] +`)`, }, );\n }\n } else {\n // The attribute exists only in the API - NOT as a Spectral rule - file an error\n results.push( { message: propertyName + `.$ref is specified - but should be removed as it is not a required attribute`, }, );\n }\n // Don't validate anything else - if specified using a $ref - it must match and nothing else\n return;\n }\n\n // Check Enums and Pseudo-Enums\n checkEnumAndPseudoEnum(input, propertyName, spec, results);\n\n // Run through all properties to check\n for (const attribute of ATTRIBUTES_TO_CHECK) {\n\n // For debugging!!!!\n if (false && (attribute === 'minItems' && propertyName === 'identifyingCodes')) {\n if (input) {\n if ((attribute in input)) {\n results.push( { message: propertyName + `.` + attribute + ` is specified in INPUT and has value:` + input[attribute], }, );\n } else {\n results.push( { message: propertyName + `.` + attribute + ` is NOT specified in INPUT`, }, );\n }\n }\n if (spec) {\n if ((attribute in spec)) {\n results.push( { message: propertyName + `.` + attribute + ` is specified in SPEC and has value:` + spec[attribute], }, );\n results.push( { message: propertyName + `.` + attribute + ` SPEC =` + spec[attribute] + `, typeOf=` + (typeof spec[attribute]), }, );\n results.push( { message: propertyName + `.` + attribute + ` INPUT =` + input[attribute] + `, typeOf=` + (typeof input[attribute]), }, );\n if (String(spec[attribute]) !== String(input[attribute])) {\n results.push( { message: propertyName + `.` + attribute + `: SPEC and INPUT are NOT alligned`, }, );\n } else {\n results.push( { message: propertyName + `.` + attribute + `: SPEC and INPUT are alligned`, }, );\n }\n } else {\n results.push( { message: propertyName + `.` + attribute + ` is NOT specified in SPEC`, }, );\n }\n }\n }\n\n // Check if the property is used in the API\n if (input && (attribute in input)) {\n // ...and check if it also exists in the spec\n if (spec && (attribute in spec)) {\n checkRequirement(input, propertyName, attribute, spec, results);\n } else {\n // The attribute exists only in the API - NOT in the spec - file an error\n results.push( { message: propertyName + `.` + attribute + ` is specified - but should be removed as it is not a required attribute`, }, );\n }\n } else if (spec && (attribute in spec) && (spec[attribute] !== undefined)) {\n // The attribute exists in the spec - NOT in the API (if the attribute is specified as \"Null\" or \"Undefined\" then it is treated just like if it was not specified - this is how you \"overrule\" a specified value)\n if (attribute === 'enum' || attribute === 'required') {\n // Provide better error message for missing enum\n results.push( { message: propertyName + `.` + attribute + ` must contain the list: [` + spec[attribute] + `] but nothing was provided`, }, );\n } else {\n results.push( { message: propertyName + `.` + attribute + ` value must equal: ` + spec[attribute] + ` but nothing was provided`, }, );\n }\n } else {\n // In none of the lists - there is no requirement for this attribute\n }\n }\n\n //Check descriptions\n if (input && input['type'] && input['type'] === 'string' && input['description']) {\n if (input.format && (input.format === 'date' || input.format === 'date-time') && input['description'].match(/iso *8601/i)) {\n results.push( { message: propertyName + `.description contains an invalid reference to ISO 8601 - please remove`, }, );\n }\n } else if (input['type'] && input['type'] !== 'array' && !input['description']) {\n // File an error if no description has been written\n results.push( { message: propertyName + `.description is missing....`, }, );\n }\n\n // Check that children are specified correctly\n if (input && input['type'] && input['type'] === 'object' && spec['CHILDREN']) {\n// if (input.properties && !arraysEqual(Object.keys(input.properties), spec['CHILDREN'])) {\n if (input.properties && !arraysEqual(Array.from(Object.keys(input.properties)), spec['CHILDREN'])) {\n // The two enum lists do not match - file an error\n results.push( { message: propertyName + ` MUST have the following children: [` + spec['CHILDREN'] + `], value provided: [` + Object.keys(input.properties) + `]`, }, );\n }\n // results.push( { message: propertyName + ` looking for children: ` + JSON.stringify(Object.keys(input.properties)) + spec['CHILDREN'], }, );\n }\n}\n\n// specA: the accumulated spec for the property\n// specB: the spec to merge into the accumulated spec. Null removes a property, otherwise it will be added or updated\n// includeParentProperty: weather to use this method to also copy the PARENTS property\nfunction mergeSpecs(specA, specB, includeParentProperty) {\n // Make sure specB exists\n if (specB) {\n // Run through all elements in specB\n for (const [key, value] of Object.entries(specB)) {\n // If value of key in specB is null\n if (!value) {\n // ...and it exists in specA\n specA[key] = undefined;\n// if (specA[key]) {\n// // ...then delete the key in specA!\n// //delete specA[key];\n// }\n // If the key already exists in specA\n } else if (includeParentProperty || key !== 'PARENTS') {\n // ...then update or add the value in specA\n specA[key] = value;\n }\n }\n }\n}\n\n// spec: the spec as defined for the current location\n// parentSpec: the spec as defined for the specific parent node\n// context: a StopLight object containing metadata about the API property being tested\n// index: the parent index of the context.path currently being checked\n// results: an accumulated list of errors for a particular property\n// returns true if location is matched - false if the property is not allowed\nfunction checkParent(spec, parentSpec, context, index, results) {\n // Check if parentSpec is defined\n if (parentSpec) {\n // Find the index of the parentName\n const newIndex = ((context.path.length > (3 + index)) && (context.path[context.path.length - (3 + index)] === 'items')) ?\n (4 + index) : (3 + index);\n // Get the parentName\n const parentPropertyName = context.path[context.path.length - newIndex];\n // Check if the parent spec has defined something for the parentName\n if (parentSpec[parentPropertyName]) {\n // ...if so - merge the spec of the parentSpec with the accumulated spec (excluding PARENTS property)\n mergeSpecs(spec, parentSpec[parentPropertyName], false);\n // ...and recursively check next parent\n return checkParent(spec, parentSpec[parentPropertyName]['PARENTS'], context, newIndex, results);\n } else {\n // Check if we are in a oneOf situation\n if (/^[0-9]+$/.test(parentPropertyName) && (context.path.length > (newIndex + 2)) && parentSpec[context.path[context.path.length - (newIndex + 2)]]) {\n mergeSpecs(spec, parentSpec[context.path[context.path.length - (newIndex + 2)]], false);\n return checkParent(spec, parentSpec[context.path[context.path.length - (newIndex + 2)]]['PARENTS'], context, newIndex + 2, results);\n } else {\n // If the parentName does not exist in the parentSpec - then the property is not allowed in that particular position\n results.push( { message: context.path[context.path.length - 1] + ` is only allowed under one of these parents: [` + Object.keys(parentSpec) + `] - was found under: ` + parentPropertyName, }, );\n return false;\n }\n }\n } else {\n return true;\n }\n}\n\n// property: the Spectral spec to validate against\n// standard: the name of the OAS file (without \".yaml\"-extension)\n// propertyName: the name of the property being tested (can be a simpleType or an object)\n// input: the property (Node) in the API to validate\n// context: a StopLight object containing metadata about the API property being tested\n// specs: the specs to test against\n//\nfunction checkStandard(property, standard, propertyName, input, context, specs, results) {\n // Gather all errors in results\n// const results = [];\n\n// let specs = {};\n if (property['DEFAULT'] && property['DEFAULT'].basedOn) {\n const basedOnPropertyName = property['DEFAULT'].basedOn;\n checkStandard(DCSA_PROPERTIES[basedOnPropertyName], standard, basedOnPropertyName, input, context, specs, results);\n }\n mergeSpecs(specs, property['DEFAULT'], false);\n\n // Merge with standard specific specs (if any)\n var standardProperty = property[standard];\n if (standardProperty) {\n mergeSpecs(specs, standardProperty['DEFAULT'], false);\n } else {\n // Check if there is a MINOR default (a 'yyy.x API spec which covers multiple APIs)\n standardProperty = property[standard.replace(/(\\d+\\.\\d+)\\.\\d+$/, '$1.x')];\n if (standardProperty) {\n mergeSpecs(specs, standardProperty['DEFAULT'], false);\n }\n }\n\n // Check if parent requirements should be checked\n if (!NO_PARENT_CHECK.has(standard)) {\n let parentSpecs = {};\n if (standardProperty) {\n // Use the PARENTS from the standard\n mergeSpecs(parentSpecs, standardProperty['PARENTS'], true);\n// if (propertyName === 'documentParties') {\n// results.push( { message: `**** parentSpecs: [` + Object.keys(parentSpecs) + `]`, }, );\n// }\n } else {\n // Use the PARENTS from the default\n mergeSpecs(parentSpecs, property['PARENTS'], true);\n }\n\n // Only merge a possible parent requirement if one has been defined\n if (!isEmptyObject(parentSpecs)) {\n let resultingParentSpecs = {};\n if (!IGNORE_PARENT_CHECK.has(standard)) {\n if (checkParent(resultingParentSpecs, parentSpecs, context, 0, results)) {\n mergeSpecs(specs, resultingParentSpecs)\n }\n }\n }\n }\n}\n\nfunction isEmpty(obj) {\n for (const prop in obj) {\n if (Object.hasOwn(obj, prop)) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction isEmptyObject(value) {\n if (value == null) {\n // null or undefined\n return false;\n }\n\n if (typeof value !== 'object') {\n // boolean, number, string, function, etc.\n return false;\n }\n\n const proto = Object.getPrototypeOf(value);\n\n // consider `Object.create(null)`, commonly used as a safe map\n // before `Map` support, an empty object as well as `{}`\n if (proto !== null && proto !== Object.prototype) {\n return false;\n }\n\n return isEmpty(value);\n}\n\nexport default createRulesetFunction(\n {\n input: null,\n options: null,\n },\n function checkRequirements(input, options, context) {\n // Get propertyName to check based on the path in the Context\n const propertyName = context.path[context.path.length - 1];\n\n // Get the Standard being tested (this excludes the '.yaml' e.g.: BKG_v2.0.2)\n const standard = context['document']['source'].substring(context['document']['source'].lastIndexOf('/') + 1, context['document']['source'].length - 5);\n\n // Check if the standard is in the list of standards that is currently covered by Spectral\n if (COVERED_STANDARDS.has(standard)) {\n // Get the property in the list of DCSA_PROPERTIES\n const property = DCSA_PROPERTIES[propertyName];\n if (property) {\n // Gather all errors in results\n const results = [];\n // Gather the specs to check against\n let specs = {};\n checkStandard(property, standard, propertyName, input, context, specs, results);\n //results.push( { message: propertyName + ` specs: [` + Object.keys(specs) + `]`, }, );\n\n // Specs is now correct in regard to specification and location\n checkAttributeRequirements(specs, propertyName, input, results);\n\n // Only return a list if it contains something - StopLight requirement!!\n if (results.length > 0) {\n return results;\n }\n } else {\n // the property name not part of DCSA_PROPERTIES\n if (!IGNORE_UNSUPPORTED_PROPERTIES.has(standard)) {\n // if (ERROR_ON_UNSUPPORTED_PROPERTIES) {\n return [ { message: propertyName + ` is not in the list of DCSA supported property names`, }, ];\n }\n }\n }\n }\n);" } ], "extendedDefault": false diff --git a/ebl/v3/issuance/EBL_ISS_v3.0.4.yaml b/ebl/v3/issuance/EBL_ISS_v3.0.4.yaml index cf4b921e..a85255d7 100644 --- a/ebl/v3/issuance/EBL_ISS_v3.0.4.yaml +++ b/ebl/v3/issuance/EBL_ISS_v3.0.4.yaml @@ -475,6 +475,8 @@ components: properties: document: $ref: '#/components/schemas/TransportDocument' + transportDocumentReplacements: + $ref: '#/components/schemas/TransportDocumentReplacements' issueTo: $ref: '#/components/schemas/IssueToParty' eBLVisualisationByCarrier: @@ -489,6 +491,55 @@ components: - document - issueTo - issuanceManifestSignedContent + + TransportDocumentReplacements: + type: object + title: Transport Document Replacements + description: | + This object provides the possibility to link the issued `Transport Document` to one or more previously issued `Transport Document(s)`. + If this issuance request is the result of a previous **Surrender for Amendments** (because of an update to the `Transport Document`), the `oldTransportDocumentReferences` list would contain a single `transportDocumentReference` (and optionally a `transportDocumentSubReference`). + If the issued `Transport Document` is a "combination" of multiple `Transport Documents`, the `oldTransportDocumentReferences` list would contain the `transportDocumentReferences` being combined into the issued `Transport Document`. + The issued `Transport Document` can also be part of a split. In this case, the `newTransportDocumentReferences` list would contain all `transportDocumentReferences` that the `Transport Document(s)` specified in `oldTransportDocumentReferences` have been split into. + properties: + oldTransportDocumentReferences: + type: array + description: | + A list of `transportDocumentReference` values and optional `transportDocumentSubReference` values from which the issued `Transport Document` originated. + If the list contains more than one item, the issuance is the result of a "combination" of multiple `Transport Documents`. + This property is only relevant if a previous **Surrender for Amendments** has been performed. + items: + $ref: '#/components/schemas/TransportDocumentRelation' + newTransportDocumentReferences: + type: array + description: | + A list of `transportDocumentReference` values and optional `transportDocumentSubReference` values into which the issued `Transport Document` has been split. + This property is only relevant if a previous **Surrender for Amendments** has resulted in a split of `Transport Documents`. + items: + $ref: '#/components/schemas/TransportDocumentRelation' + + TransportDocumentRelation: + type: object + title: Transport Document Relation + description: | + An object linking a `transportDocumentReference` with an optional `transportDocumentSubReference`. + properties: + transportDocumentReference: + type: string + pattern: ^\S(?:.*\S)?$ + maxLength: 20 + description: | + A unique number allocated by the shipping line to the `Transport Document` and the main number used for the tracking of the status of the shipment. + example: HHL71800000 + transportDocumentSubReference: + type: string + pattern: ^\S(?:.*\S)?$ + maxLength: 100 + description: | + Additional reference that can be optionally used alongside the `transportDocumentReference` in order to distinguish between versions of the same `Transport Document`. + example: Version_1 + required: + - transportDocumentReference + SupportingDocument: type: object title: Supporting Document From a9268cac92ecf2b4780a5ad3d499d9876e31f9c5 Mon Sep 17 00:00:00 2001 From: "henrik.larsen@dcsa.org" Date: Thu, 21 May 2026 11:54:06 +0200 Subject: [PATCH 2/5] Fix review comments --- ebl/v3/issuance/EBL_ISS_v3.0.4.yaml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/ebl/v3/issuance/EBL_ISS_v3.0.4.yaml b/ebl/v3/issuance/EBL_ISS_v3.0.4.yaml index a85255d7..129a9bc2 100644 --- a/ebl/v3/issuance/EBL_ISS_v3.0.4.yaml +++ b/ebl/v3/issuance/EBL_ISS_v3.0.4.yaml @@ -497,15 +497,20 @@ components: title: Transport Document Replacements description: | This object provides the possibility to link the issued `Transport Document` to one or more previously issued `Transport Document(s)`. + If this issuance request is the result of a previous **Surrender for Amendments** (because of an update to the `Transport Document`), the `oldTransportDocumentReferences` list would contain a single `transportDocumentReference` (and optionally a `transportDocumentSubReference`). - If the issued `Transport Document` is a "combination" of multiple `Transport Documents`, the `oldTransportDocumentReferences` list would contain the `transportDocumentReferences` being combined into the issued `Transport Document`. + + If the issued `Transport Document` is a "combine" of multiple `Transport Documents`, the `oldTransportDocumentReferences` list would contain the `transportDocumentReferences` being combined into the issued `Transport Document`. + The issued `Transport Document` can also be part of a split. In this case, the `newTransportDocumentReferences` list would contain all `transportDocumentReferences` that the `Transport Document(s)` specified in `oldTransportDocumentReferences` have been split into. + + **Note:** If provided it should be considered as metadata and is not part of the `issuanceManifestSignedContent`. properties: oldTransportDocumentReferences: type: array description: | A list of `transportDocumentReference` values and optional `transportDocumentSubReference` values from which the issued `Transport Document` originated. - If the list contains more than one item, the issuance is the result of a "combination" of multiple `Transport Documents`. + If the list contains more than one item, the issuance is the result of a "combine" of multiple `Transport Documents`. This property is only relevant if a previous **Surrender for Amendments** has been performed. items: $ref: '#/components/schemas/TransportDocumentRelation' From db7c02581c8b231f22c2558577040833f75bfd97 Mon Sep 17 00:00:00 2001 From: "henrik.larsen@dcsa.org" Date: Thu, 21 May 2026 15:33:29 +0200 Subject: [PATCH 3/5] BKG 2.0, EBL 3.0: SD-2890: Change Shipper/Carrier to Consumer/Provider --- bkg/v2/BKG_v2.0.5.yaml | 40 +- ebl/v3/EBL_v3.0.4.yaml | 74 +- ebl/v3/endorsement/EBL_END_v3.0.4.yaml | 908 +++++++++++++++++++++++++ ebl/v3/issuance/EBL_ISS_v3.0.4.yaml | 8 +- pint/v3/EBL_PINT_v3.0.0.yaml | 8 +- 5 files changed, 973 insertions(+), 65 deletions(-) create mode 100644 ebl/v3/endorsement/EBL_END_v3.0.4.yaml diff --git a/bkg/v2/BKG_v2.0.5.yaml b/bkg/v2/BKG_v2.0.5.yaml index 309f0bf8..af43b447 100644 --- a/bkg/v2/BKG_v2.0.5.yaml +++ b/bkg/v2/BKG_v2.0.5.yaml @@ -5,7 +5,7 @@ info: description: |

DCSA OpenAPI specification for the Booking process

- This API is intended as an API between a carrier and anyone creating a `Booking`. The process includes: + This API is intended as an API between a provider and anyone creating a `Booking`. The process includes: - Booking request - Booking update @@ -1503,7 +1503,7 @@ paths: Cancels the Booking or cancels an Amendment operationId: cancel-booking description: | - A shipper initiated cancellation of the `Booking` or `Booking Amendment` with the `bookingReference`. The path can contain a `carrierBookingRequestReference` or a `carrierBookingReference`. + A consumer initiated cancellation of the `Booking` or `Booking Amendment` with the `bookingReference`. The path can contain a `carrierBookingRequestReference` or a `carrierBookingReference`. This endPoint corresponds with **UseCase 11 - Cancel Booking request by shipper**, **UseCase 9 - Cancel amendment to confirmed Booking** or **UseCase 13 - Cancel confirmed Booking by shipper**. @@ -2469,7 +2469,7 @@ components: - `PENDING_AMENDMENT` (An amendment is required to the Booking) - `REJECTED` (Booking discontinued by carrier before it has been Confirmed) - `DECLINED` (Booking discontinued by carrier after it has been Confirmed) - - `CANCELLED` (Booking discontinued by consumer) + - `CANCELLED` (Booking discontinued by shipper) - `COMPLETED` (The Transport Document this Booking is connected to has been Surrendered for Delivery) example: RECEIVED amendedBookingStatus: @@ -2480,8 +2480,8 @@ components: - `AMENDMENT_RECEIVED` (An amendment has been received and is awaiting to be processed) - `AMENDMENT_CONFIRMED` (Amendment is confirmed) - - `AMENDMENT_DECLINED` (Amendment discontinued by provider) - - `AMENDMENT_CANCELLED` (Amendment discontinued by consumer) + - `AMENDMENT_DECLINED` (Amendment discontinued by carrier) + - `AMENDMENT_CANCELLED` (Amendment discontinued by shipper) example: AMENDMENT_RECEIVED bookingCancellationStatus: type: string @@ -2489,8 +2489,8 @@ components: description: | The status of the latest booking cancellation. If no cancellation has been requested - then this property is empty. Possible values are: - `CANCELLATION_RECEIVED` (A request to cancel a Confirmed Booking has been received and is awaiting to be processed) - - `CANCELLATION_DECLINED` (Cancellation of the Confirmed Booking has been declined by provider) - - `CANCELLATION_CONFIRMED` (Cancellation of the Confirmed Booking has been confirmed by provider) + - `CANCELLATION_DECLINED` (Cancellation of the Confirmed Booking has been declined by carrier) + - `CANCELLATION_CONFIRMED` (Cancellation of the Confirmed Booking has been confirmed by carrier) example: CANCELLATION_RECEIVED carrierBookingRequestReference: type: string @@ -3148,20 +3148,20 @@ components: transportDocumentReferences: type: array description: | - An array of `transportDocumentReference` requested by the Shipper to be associated to this Booking. + An array of `transportDocumentReference` requested by the shipper to be associated to this Booking. items: type: string pattern: ^\S(?:.*\S)?$ maxLength: 20 description: | - The `transportDocumentReference` requested by the Shipper to be associated to this Booking. + The `transportDocumentReference` requested by the shipper to be associated to this Booking. example: reserved-HHL123 requestedNumberOfTransportDocuments: type: integer format: int32 minimum: 1 description: | - The number of `Transport Documents` requested to be linked to this Booking by the Shipper. + The number of `Transport Documents` requested to be linked to this Booking by the shipper. example: 3 bookingChannelReference: type: string @@ -3550,20 +3550,20 @@ components: transportDocumentReferences: type: array description: | - An array of `transportDocumentReference` requested by the Shipper to be associated to this Booking. + An array of `transportDocumentReference` requested by the shipper to be associated to this Booking. items: type: string pattern: ^\S(?:.*\S)?$ maxLength: 20 description: | - The `transportDocumentReference` requested by the Shipper to be associated to this Booking. + The `transportDocumentReference` requested by the shipper to be associated to this Booking. example: reserved-HHL123 requestedNumberOfTransportDocuments: type: integer format: int32 minimum: 1 description: | - The number of `Transport Documents` requested to be linked to this Booking by the Shipper. + The number of `Transport Documents` requested to be linked to this Booking by the shipper. example: 3 bookingChannelReference: type: string @@ -3728,7 +3728,7 @@ components: - `PENDING_AMENDMENT` (An amendment is required to the Booking) - `REJECTED` (Booking discontinued by carrier before it has been Confirmed) - `DECLINED` (Booking discontinued by carrier after it has been Confirmed) - - `CANCELLED` (Booking discontinued by consumer) + - `CANCELLED` (Booking discontinued by shipper) - `COMPLETED` (The Transport Document this Booking is connected to has been Surrendered for Delivery) example: RECEIVED amendedBookingStatus: @@ -3738,8 +3738,8 @@ components: The status of latest amendment added to the `Booking`. If no amendment has been requested - then this field is empty. Possible values are: - `AMENDMENT_RECEIVED` (An amendment has been received and is awaiting to be processed) - `AMENDMENT_CONFIRMED` (Amendment is confirmed) - - `AMENDMENT_DECLINED` (Amendment discontinued by provider) - - `AMENDMENT_CANCELLED` (Amendment discontinued by consumer) + - `AMENDMENT_DECLINED` (Amendment discontinued by carrier) + - `AMENDMENT_CANCELLED` (Amendment discontinued by shipper) example: AMENDMENT_RECEIVED bookingCancellationStatus: type: string @@ -3747,8 +3747,8 @@ components: description: | The status of the latest booking cancellation. If no cancellation has been requested - then this property is empty. Possible values are: - `CANCELLATION_RECEIVED` (A request to cancel a Confirmed Booking has been received and is awaiting to be processed) - - `CANCELLATION_DECLINED` (Cancellation of the Confirmed Booking has been declined by provider) - - `CANCELLATION_CONFIRMED` (Cancellation of the Confirmed Booking has been confirmed by provider) + - `CANCELLATION_DECLINED` (Cancellation of the Confirmed Booking has been declined by carrier) + - `CANCELLATION_CONFIRMED` (Cancellation of the Confirmed Booking has been confirmed by carrier) example: CANCELLATION_RECEIVED receiptTypeAtOrigin: type: string @@ -4034,7 +4034,7 @@ components: format: int32 minimum: 1 description: | - The number of `Transport Documents` requested to be linked to this Booking by the Shipper. + The number of `Transport Documents` requested to be linked to this Booking by the shipper. example: 3 bookingChannelReference: type: string @@ -5054,7 +5054,7 @@ components: type: string maxLength: 150 description: | - Code to identify the party as provided by the code list provider + Code to identify the party as provided by the `codeListProvider`. example: MSK codeListName: type: string diff --git a/ebl/v3/EBL_v3.0.4.yaml b/ebl/v3/EBL_v3.0.4.yaml index d5eefbb5..fbbd4473 100644 --- a/ebl/v3/EBL_v3.0.4.yaml +++ b/ebl/v3/EBL_v3.0.4.yaml @@ -5,7 +5,7 @@ info: description: |

DCSA OpenAPI specification for the Shipping Instructions and Transport Document process

- This API is intended as an API between a carrier and anyone creating a `Shipping Instructions` and approving a `Transport Document`. The process includes: + This API is intended as an API between a provider and anyone creating a `Shipping Instructions` and approving a `Transport Document`. The process includes: - Shipping Instructions submission - Shipping Instructions update @@ -85,7 +85,7 @@ paths: Creates a new `Shipping Instructions`. This endPoint corresponds with **UseCase 1 - Submit Shipping Instructions**. ## Precondition - The consumer has information for a `Shipping Instructions`. The empty equipment has been released to the shipper. The `Booking` is in state `CONFIRMED`. + The consumer has information for a `Shipping Instructions`. The empty equipment has been released to the consumer. The `Booking` is in state `CONFIRMED`. ## Postcondition The provider has received the `Shipping Instructions`. @@ -953,7 +953,7 @@ paths: - $ref: '#/components/parameters/documentReference' - $ref: '#/components/parameters/Api-Version-Major' description: | - A shipper initiated cancellation of the `Shipping Instructions` or `Updated Shipping Instructions` identified by the `documentReference` path parameter. The value of `documentReference` may be either a `shippingInstructionsReference` or a `transportDocumentReference`. + A consumer initiated cancellation of the `Shipping Instructions` or `Updated Shipping Instructions` identified by the `documentReference` path parameter. The value of `documentReference` may be either a `shippingInstructionsReference` or a `transportDocumentReference`. This endPoint corresponds with **UseCase 5 - Cancel update to Shipping Instructions** or **UseCase 15 - Cancel Shipping Instructions**. @@ -2738,7 +2738,7 @@ paths: example: HHL71800000 - $ref: '#/components/parameters/Api-Version-Major' description: | - A shipper initiated cancellation of the `Direct Transport Document` amendment identified by the `transportDocumentReference` path parameter. + A consumer initiated cancellation of the `Direct Transport Document` amendment identified by the `transportDocumentReference` path parameter. This endPoint corresponds with **UseCase 18 - Cancel Transport Document amendment**. @@ -3928,8 +3928,8 @@ components: - `RECEIVED` (Shipping Instructions have been received) - `PENDING_UPDATE` (An update is required to the Shipping Instructions) - `COMPLETED` (The Shipping Instructions can no longer be modified - the related Transport Document has been surrendered for delivery) - - `CANCELLED` (The Shipping Instructions have been cancelled by Shipper) - - `DECLINED` (The Shipping Instructions have been declined by Carrier) + - `CANCELLED` (The Shipping Instructions have been cancelled by shipper) + - `DECLINED` (The Shipping Instructions have been declined by carrier) **Condition:** When communicating with providers **or** consumers implementing API **v3.0.2 or earlier**, a sender implementing API **v3.0.3 or later MUST NOT** use `CANCELLED` or `DECLINED` values. Recipients implementing earlier versions **MAY ignore these values or treat the request as invalid**. example: RECEIVED @@ -3940,8 +3940,8 @@ components: The status of the latest update to the `Shipping Instructions`. If no update has been requested - then this property is empty. Possible values are: - `UPDATE_RECEIVED` (An update to a Shipping Instructions has been received and is awaiting to be processed) - `UPDATE_CONFIRMED` (An update to a Shipping Instructions has been confirmed) - - `UPDATE_CANCELLED` (An update to a Shipping Instructions is discontinued by consumer) - - `UPDATE_DECLINED` (An update to a Shipping Instructions is discontinued by provider) + - `UPDATE_CANCELLED` (An update to a Shipping Instructions is discontinued by shipper) + - `UPDATE_DECLINED` (An update to a Shipping Instructions is discontinued by carrier) example: UPDATE_RECEIVED shippingInstructionsReference: type: string @@ -4110,8 +4110,8 @@ components: The status of the `Transport Document`. Possible values are: - `DRAFT` (The Transport Document is currently a Draft) - - `APPROVED` (The Transport Document has been Approved by consumer) - - `ISSUED` (The Transport Document has been Issued by provider) + - `APPROVED` (The Transport Document has been Approved by shipper) + - `ISSUED` (The Transport Document has been Issued by carrier) - `PENDING_SURRENDER_FOR_AMENDMENT` (The Transport Document has a pending Surrender for Amendment) - `SURRENDER_FOR_AMENDMENT` (The Transport Document is Surrendered for Amendment) - `VOID` (The Transport Document has been Voided) @@ -4125,8 +4125,8 @@ components: The status of the latest amendment to the `Transport Document`. If no amendments has been requested - then this field is empty. Possible values are: - `AMENDMENT_RECEIVED` (An amendment to a Transport Document is waiting to be processed) - `AMENDMENT_CONFIRMED` (An amendment to a Transport Document has been confirmed) - - `AMENDMENT_CANCELLED` (An amendment to a Transport Document is discontinued by consumer) - - `AMENDMENT_DECLINED` (An amendment to a Transport Document is discontinued by provider) + - `AMENDMENT_CANCELLED` (An amendment to a Transport Document is discontinued by shipper) + - `AMENDMENT_DECLINED` (An amendment to a Transport Document is discontinued by carrier) **👉Important note:** When communicating with providers implementing API **v3.0.2 or earlier**, a sender implementing API **v3.0.3 or later MUST NOT** use this property as it will most likely be ignored. Recipients implementing earlier versions **MAY ignore** this property. example: AMENDMENT_RECEIVED @@ -4209,7 +4209,7 @@ components: CreateShippingInstructions: type: object description: | - The `Shipping Instructions` is an enrichment to the original booking shared by the Shipper to the Carrier. The information given by the Shipper through the `Shipping Instructions` is the information required to create a `Draft Transport Document`. + The `Shipping Instructions` is an enrichment to the original booking shared by the shipper to the carrier. The information given by the shipper through the `Shipping Instructions` is the information required to create a `Draft Transport Document`. title: Create Shipping Instructions properties: shippingInstructionsRevisionNumber: @@ -4439,7 +4439,7 @@ components: advanceManifestFilings: type: array description: | - A list of `Advance Manifest Filings` specified by the Shipper to indicate whom is to do the Filing + A list of `Advance Manifest Filings` specified by the shipper to indicate whom is to do the Filing items: $ref: '#/components/schemas/AdvanceManifestFiling' isHouseBillOfLadingsIssued: @@ -4452,13 +4452,13 @@ components: houseBillOfLadings: type: array description: | - A list of `House Bill of Ladings` specified by the Shipper. + A list of `House Bill of Ladings` specified by the shipper. items: $ref: '#/components/schemas/HouseBillOfLading' requestedCarrierCertificates: type: array description: | - Certificate(s) requested by the Shipper for the Carrier to include as part of the shipment documentation pack + Certificate(s) requested by the shipper for the carrier to include as part of the shipment documentation pack items: type: string maxLength: 100 @@ -4493,7 +4493,7 @@ components: requestedCarrierClauses: type: array description: | - Clauses requested by the Shipper for the Carrier to include in the `Transport Document` `Carrier clauses` + Clauses requested by the shipper for the carrier to include in the `Transport Document` `Carrier clauses` items: type: string maxLength: 100 @@ -4760,7 +4760,7 @@ components: advanceManifestFilings: type: array description: | - A list of `Advance Manifest Filings` specified by the Shipper to indicate whom is to do the Filing + A list of `Advance Manifest Filings` specified by the shipper to indicate whom is to do the Filing items: $ref: '#/components/schemas/AdvanceManifestFiling' isHouseBillOfLadingsIssued: @@ -4773,13 +4773,13 @@ components: houseBillOfLadings: type: array description: | - A list of `House Bill of Ladings` specified by the Shipper. + A list of `House Bill of Ladings` specified by the shipper. items: $ref: '#/components/schemas/HouseBillOfLading' requestedCarrierCertificates: type: array description: | - Certificate(s) requested by the Shipper for the Carrier to include as part of the shipment documentation pack + Certificate(s) requested by the shipper for the carrier to include as part of the shipment documentation pack items: type: string maxLength: 100 @@ -4814,7 +4814,7 @@ components: requestedCarrierClauses: type: array description: | - Clauses requested by the Shipper for the Carrier to include in the `Transport Document` `Carrier clauses` + Clauses requested by the shipper for the carrier to include in the `Transport Document` `Carrier clauses` items: type: string maxLength: 100 @@ -4844,7 +4844,7 @@ components: ShippingInstructions: description: | - The `Shipping Instructions` as provided by the Shipper. + The `Shipping Instructions` as provided by the shipper. type: object title: Shipping Instructions properties: @@ -4875,8 +4875,8 @@ components: - `RECEIVED` (Shipping Instructions have been received) - `PENDING_UPDATE` (An update is required to the Shipping Instructions) - `COMPLETED` (The Shipping Instructions can no longer be modified - the related Transport Document has been surrendered for delivery) - - `CANCELLED` (The Shipping Instructions have been cancelled by Shipper) - - `DECLINED` (The Shipping Instructions have been declined by Carrier) + - `CANCELLED` (The Shipping Instructions have been cancelled by shipper) + - `DECLINED` (The Shipping Instructions have been declined by carrier) **Condition:** When communicating with providers **or** consumers implementing API **v3.0.2 or earlier**, a sender implementing API **v3.0.3 or later MUST NOT** use `CANCELLED` or `DECLINED` values. Recipients implementing earlier versions **MAY ignore these values or treat the request as invalid**. example: RECEIVED @@ -4887,8 +4887,8 @@ components: The status of the latest update to the `Shipping Instructions`. If no update has been requested - then this property is empty. Possible values are: - `UPDATE_RECEIVED` (An update to a Shipping Instructions has been received and is awaiting to be processed) - `UPDATE_CONFIRMED` (An update to a Shipping Instructions has been confirmed) - - `UPDATE_CANCELLED` (An update to a Shipping Instructions is discontinued by consumer) - - `UPDATE_DECLINED` (An update to a Shipping Instructions is discontinued by provider) + - `UPDATE_CANCELLED` (An update to a Shipping Instructions is discontinued by shipper) + - `UPDATE_DECLINED` (An update to a Shipping Instructions is discontinued by carrier) example: UPDATE_RECEIVED transportDocumentTypeCode: type: string @@ -5105,7 +5105,7 @@ components: advanceManifestFilings: type: array description: | - A list of `Advance Manifest Filings` specified by the Shipper to indicate whom is to do the Filing + A list of `Advance Manifest Filings` specified by the shipper to indicate whom is to do the Filing items: $ref: '#/components/schemas/AdvanceManifestFiling' isHouseBillOfLadingsIssued: @@ -5117,13 +5117,13 @@ components: houseBillOfLadings: type: array description: | - A list of `House Bill of Ladings` specified by the Shipper. + A list of `House Bill of Ladings` specified by the shipper. items: $ref: '#/components/schemas/HouseBillOfLading' requestedCarrierCertificates: type: array description: | - Certificate(s) requested by the Shipper for the Carrier to include as part of the shipment documentation pack + Certificate(s) requested by the shipper for the carrier to include as part of the shipment documentation pack items: type: string maxLength: 100 @@ -5158,7 +5158,7 @@ components: requestedCarrierClauses: type: array description: | - Clauses requested by the Shipper for the Carrier to include in the `Transport Document` `Carrier clauses` + Clauses requested by the shipper for the carrier to include in the `Transport Document` `Carrier clauses` items: type: string maxLength: 100 @@ -7650,7 +7650,7 @@ components: type: string maxLength: 150 description: | - Code to identify the party as provided by the code list provider + Code to identify the party as provided by the `codeListProvider`. example: MSK codeListName: type: string @@ -9671,7 +9671,7 @@ components: type: object title: House Bill of Lading description: | - A legal contract between the Ocean Transport Intermediary (OTI), such as a Non-Vessel Operating Common Carrier (NVOCC) or a freight forwarder, and the shipper that acknowledges the receipt of goods and outlines the terms of shipment. + A legal contract between the Ocean Transport Intermediary (OTI), such as a Non-Vessel Operating Common carrier (NVOCC) or a freight forwarder, and the shipper that acknowledges the receipt of goods and outlines the terms of shipment. properties: houseBillOfLadingReference: type: string @@ -9884,8 +9884,8 @@ components: description: | The status of the `Transport Document`. Possible values are: - `DRAFT` (the Transport Document is currently a Draft) - - `APPROVED` (the Transport Document has been Approved by consumer) - - `ISSUED` (the Transport Document has been Issued by provider) + - `APPROVED` (the Transport Document has been Approved by shipper) + - `ISSUED` (the Transport Document has been Issued by carrier) - `PENDING_SURRENDER_FOR_AMENDMENT` (the Transport Document has a pending Surrender for Amendment) - `SURRENDERED_FOR_AMENDMENT` (the Transport Document is Surrendered for Amendment) - `PENDING_SURRENDER_FOR_DELIVERY` (the Transport Document has a pending Surrender for Delivery) @@ -10046,7 +10046,7 @@ components: maxLength: 250 description: | The text to be displayed on the `Transport Document` as evidence that the goods have been received for shipment or shipped on board. - example: 'Received for Shipment CMA CGM CONCORDE 28-Jul-2022 CMA CGM Agences France SAS As agents for the Carrier' + example: 'Received for Shipment CMA CGM CONCORDE 28-Jul-2022 CMA CGM Agences France SAS As agents for the carrier' termsAndConditions: type: string maxLength: 50000 @@ -10291,8 +10291,8 @@ components: The status of the latest amendment to the `Transport Document`. If no amendments has been requested - then this field is empty. Possible values are: - `AMENDMENT_RECEIVED` (An amendment to a Transport Document is waiting to be processed) - `AMENDMENT_CONFIRMED` (An amendment to a Transport Document has been confirmed) - - `AMENDMENT_CANCELLED` (An amendment to a Transport Document is discontinued by consumer) - - `AMENDMENT_DECLINED` (An amendment to a Transport Document is discontinued by provider) + - `AMENDMENT_CANCELLED` (An amendment to a Transport Document is discontinued by shipper) + - `AMENDMENT_DECLINED` (An amendment to a Transport Document is discontinued by carrier) example: AMENDMENT_RECEIVED amendedTransportDocument: $ref: '#/components/schemas/TransportDocument' diff --git a/ebl/v3/endorsement/EBL_END_v3.0.4.yaml b/ebl/v3/endorsement/EBL_END_v3.0.4.yaml new file mode 100644 index 00000000..0a78acd5 --- /dev/null +++ b/ebl/v3/endorsement/EBL_END_v3.0.4.yaml @@ -0,0 +1,908 @@ +openapi: 3.0.3 +x-stoplight: + id: 7fs9ikeopa5ok +info: + version: 3.0.3 + title: DCSA eBL Endorsement Chain API + description: | +

DCSA OpenAPI specification for electronic Bill of Lading (eBL) Endorsement Chain (END)

+ + ### Changelog and GitHub + For a changelog please click [here](https://github.com/dcsaorg/DCSA-OpenAPI/tree/master/ebl/v3/endorsement#v303). If you have any questions, feel free to [Contact Us](https://dcsa.org/get-involved/contact-us). + + API specification issued by [DCSA.org](https://dcsa.org/). + license: + name: Apache 2.0 + url: 'https://www.apache.org/licenses/LICENSE-2.0.html' + contact: + name: Digital Container Shipping Association (DCSA) + url: 'https://dcsa.org' + email: info@dcsa.org +tags: + - name: Endorsement Chain + description: Endorsement Chain +paths: + '/endorsement-chains/{transportDocumentReference}': + get: + tags: + - Endorsement Chain + summary: Gets the Endorsement Chain + operationId: getEndorsementChain + description: | + Gets the Endorsement Chain by `transportDocumentReference`. It is possible to filter the result by carrier `SCAC` code and/or by `transportDocumentSubReference`. The result is a list of Endorsement Chains matching the filter. + + **Note:** It is not possible to limit the result, this endPoint does not support pagination. + parameters: + - in: path + name: transportDocumentReference + description: | + The `transportDocumentReference` of the `Transport Document` to get the Endorsement Chain from + required: true + schema: + type: string + pattern: '^\S(?:.*\S)?$' + maxLength: 20 + description: | + A unique number allocated by the shipping line to the `Transport Document` and the main number used for the tracking of the status of the shipment. + example: HHL71800000 + - in: query + name: transportDocumentSubReference + description: | + Filter by Transport Document Sub-reference (or version). In case a specific version of the Endorsement Chain is requested - adding this filter narrows the result to 1 Endorsement Chain. + schema: + type: string + pattern: '^\S(?:.*\S)?$' + maxLength: 100 + - in: query + name: carrierSCACCode + description: | + Filter by carrier `SCAC` code (provided by [NMFTA](https://nmfta.org/scac/)). Adding this will only match Transport Documents from the carrier matching the `carrierSCACCode` value. + required: false + schema: + type: string + pattern: ^\S+$ + maxLength: 4 + example: YMLU + - in: header + name: API-Version + required: false + schema: + type: string + example: 3.0.3 + description: | + An API-Version header **MAY** be added to the request (optional); if added it **MUST** contain the SemVer of the consumer. + responses: + '200': + description: | + All Endorsement Chains that match the filter criteria. + headers: + API-Version: + $ref: '#/components/headers/API-Version' + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/EndorsementChain' + examples: + surrenderedStraightBLExample: + summary: | + Surrendered straight B/L + description: | + Endorsement Chain for a surrendered 'Straight Bill of Lading' issued by Yang Ming to Suzano Brazil (who is the shipper) on the Wave platform. Suzano China is the Consignee. The `Transport Document` contains this information: + - **Shipper:** Suzano Brazil + - **Consignee:** Suzano China + + The Endorsement Chain consists of the follow 4 entries: + |Entry|Action Code|Actor|Recipient| + |:--:|:---------:|-----|----------| + |1|`SURRENDERED`|Yang Ming Marine Transport Corporation|| + |2|`SURRENDER_FOR_DELIVERY`|Suzano China|Yang Ming Marine Transport Corporation| + |3|`TRANSFER`|Suzano Brazil|Suzano China| + |4|`ISSUE`|Yang Ming Marine Transport Corporation|Suzano Brazil| + + Please note that the 4th entry in the example (`actionCode: 'ISSUE'`) is the first entry in the chain, on which further endorsements are made... + value: + - transportDocumentReference: 62CD536BA8D34C469AFD + transportDocumentSubReference: fc5009a7-25ad-4bb0-9892-4e2dea6bcdd9 + carrierSCACCode: YMLU + endorsementChain: + - actionDateTime: '2025-09-12T17:23:12Z' + actionCode: SURRENDERED + actor: + partyName: Yang Ming Marine Transport Corporation + eblPlatform: WAVE + identifyingCodes: + - codeListProvider: WAVE + partyCode: 4bd196da-0d8b-436d-bad4-4cc88f04a035 + - actionDateTime: '2025-09-12T17:23:12Z' + actionCode: SURRENDER_FOR_DELIVERY + actor: + partyName: Suzano China + eblPlatform: WAVE + identifyingCodes: + - codeListProvider: WAVE + partyCode: 0665fefb-7c3f-443b-8ccd-73ced178448f + recipient: + partyName: Yang Ming Marine Transport Corporation + eblPlatform: WAVE + identifyingCodes: + - codeListProvider: WAVE + partyCode: 4bd196da-0d8b-436d-bad4-4cc88f04a035 + - actionDateTime: '2025-09-10T14:35:42Z' + actionCode: TRANSFER + actor: + partyName: Suzano Brazil + eblPlatform: WAVE + identifyingCodes: + - codeListProvider: WAVE + partyCode: ee92b6b7-ac27-4537-87df-019c69389346 + recipient: + partyName: Suzano China + eblPlatform: WAVE + identifyingCodes: + - codeListProvider: WAVE + partyCode: 0665fefb-7c3f-443b-8ccd-73ced178448f + - actionDateTime: '2025-09-09T12:55:31Z' + actionCode: ISSUE + actor: + partyName: Yang Ming Marine Transport Corporation + eblPlatform: WAVE + identifyingCodes: + - codeListProvider: WAVE + partyCode: 4bd196da-0d8b-436d-bad4-4cc88f04a035 + recipient: + partyName: Suzano Brazil + eblPlatform: WAVE + identifyingCodes: + - codeListProvider: WAVE + partyCode: ee92b6b7-ac27-4537-87df-019c69389346 + surrenderedStraightBLWithOnBehalfOfPartiesExample: + summary: | + Surrendered straight B/L (using 'On Behalf of Parties') + description: | + Endorsement Chain for a surrendered 'Straight Bill of Lading' issued by ZIM to a Brazilian local agent (the Issue to Party and mentioned as a `On Behalf of Shipper` on the eBL) on the Bolero platform. Suzano China is the Consignee using China local agent as a `On Behalf of Consignee`. The `Transport Document` contains this information: + - **Shipper:** Suzano Brazil + - **On behalf of Shipper:** Brazil local agent + - **Consignee:** Suzano China + - **On behalf of Consignee:** China local agent + + The Endorsement Chain consists of the follow 4 entries: + |Entry|Action Code|Actor|Recipient| + |:--:|:---------:|-----|----------| + |1|`SURRENDERED`|Zim Integrated Shipping Services Ltd|| + |2|`SURRENDER_FOR_DELIVERY`|China local agent **on Behalf of** Suzano China|Zim Integrated Shipping Services Ltd| + |3|`TRANSFER`|Brazil local agent **on Behalf of** Suzano Brazil|China local agent **on Behalf of** Suzano China| + |4|`ISSUE`|Zim Integrated Shipping Services Ltd|Brazil local agent **on Behalf of** Suzano Brazil| + + Please note that the 4th entry in the example (`actionCode: 'ISSUE'`) is the first entry in the chain, on which further endorsements are made... + value: + - transportDocumentReference: '61572195130255734095' + transportDocumentSubReference: c5c6b4a8-3645-4209-96e2-453daebbb961 + carrierSCACCode: ZIMU + endorsementChain: + - actionDateTime: '2025-09-12T17:23:12Z' + actionCode: SURRENDERED + actor: + partyName: Zim Integrated Shipping Services Ltd + eblPlatform: BOLE + identifyingCodes: + - codeListProvider: BOLE + partyCode: 0bbf18d8-ee73-40a0-baa2-7349fbfafcee + - actionDateTime: '2025-09-12T17:13:44Z' + actionCode: SURRENDER_FOR_DELIVERY + actor: + partyName: China local agent + eblPlatform: BOLE + identifyingCodes: + - codeListProvider: BOLE + partyCode: 61cb4944-1f36-428b-9d95-2f5539dea06b + representedParty: + partyName: Suzano China + identifyingCodes: + - codeListProvider: BOLE + partyCode: d02751e3-2958-4c18-9e18-4e8ee341a93c + recipient: + partyName: Zim Integrated Shipping Services Ltd + eblPlatform: BOLE + identifyingCodes: + - codeListProvider: BOLE + partyCode: 0bbf18d8-ee73-40a0-baa2-7349fbfafcee + - actionDateTime: '2025-09-11T15:45:42Z' + actionCode: TRANSFER + actor: + partyName: Brazil local agent + eblPlatform: BOLE + identifyingCodes: + - codeListProvider: BOLE + partyCode: 4b502cf9-627b-4895-8b1f-df0c42e21e17 + representedParty: + partyName: Suzano Brazil + identifyingCodes: + - codeListProvider: BOLE + partyCode: c6880d2f-f0c6-4a59-87b3-9e9284084b60 + recipient: + partyName: China local agent + eblPlatform: BOLE + identifyingCodes: + - codeListProvider: BOLE + partyCode: 61cb4944-1f36-428b-9d95-2f5539dea06b + representedParty: + partyName: Suzano China + identifyingCodes: + - codeListProvider: BOLE + partyCode: d02751e3-2958-4c18-9e18-4e8ee341a93c + - actionDateTime: '2025-09-09T12:55:31Z' + actionCode: ISSUE + actor: + partyName: Zim Integrated Shipping Services Ltd + eblPlatform: BOLE + identifyingCodes: + - codeListProvider: BOLE + partyCode: 0bbf18d8-ee73-40a0-baa2-7349fbfafcee + recipient: + partyName: Brazil local agent + eblPlatform: BOLE + identifyingCodes: + - codeListProvider: BOLE + partyCode: 4b502cf9-627b-4895-8b1f-df0c42e21e17 + representedParty: + partyName: Suzano Brazil + identifyingCodes: + - codeListProvider: BOLE + partyCode: c6880d2f-f0c6-4a59-87b3-9e9284084b60 + twoTDSRExample: + summary: | + Multiple EndorsementChains for same B/L + description: | + 2 endorsement chains for the same `transportDocumentReference`. First entry (`transportDocumentSubReference='v2'`) has only been re-issued. Second entry (`transportDocumentSubReference='v1'`) is the endorsement chain that has been issued and then surrendered for amendments. + value: + - transportDocumentReference: 62CD536BA8D34C469AFD + transportDocumentSubReference: v2 + carrierSCACCode: YMLU + endorsementChain: + - actionDateTime: '2025-09-09T13:55:31Z' + actionCode: ISSUE + actor: + partyName: Yang Ming Marine Transport Corporation + eblPlatform: WAVE + identifyingCodes: + - codeListProvider: WAVE + partyCode: 4bd196da-0d8b-436d-bad4-4cc88f04a035 + recipient: + partyName: Suzano Brazil + eblPlatform: WAVE + identifyingCodes: + - codeListProvider: WAVE + partyCode: ee92b6b7-ac27-4537-87df-019c69389346 + - transportDocumentReference: 62CD536BA8D34C469AFD + transportDocumentSubReference: v1 + carrierSCACCode: YMLU + endorsementChain: + - actionDateTime: '2025-09-12T17:23:12Z' + actionCode: SURRENDERED + actor: + partyName: Yang Ming Marine Transport Corporation + eblPlatform: WAVE + identifyingCodes: + - codeListProvider: WAVE + partyCode: 4bd196da-0d8b-436d-bad4-4cc88f04a035 + - actionDateTime: '2025-09-12T17:23:12Z' + actionCode: SURRENDER_FOR_AMENDMENT + actor: + partyName: Suzano Brazil + eblPlatform: WAVE + identifyingCodes: + - codeListProvider: WAVE + partyCode: ee92b6b7-ac27-4537-87df-019c69389346 + recipient: + partyName: Yang Ming Marine Transport Corporation + eblPlatform: WAVE + identifyingCodes: + - codeListProvider: WAVE + partyCode: 4bd196da-0d8b-436d-bad4-4cc88f04a035 + - actionDateTime: '2025-09-09T12:55:31Z' + actionCode: ISSUE + actor: + partyName: Yang Ming Marine Transport Corporation + eblPlatform: WAVE + identifyingCodes: + - codeListProvider: WAVE + partyCode: 4bd196da-0d8b-436d-bad4-4cc88f04a035 + recipient: + partyName: Suzano Brazil + eblPlatform: WAVE + identifyingCodes: + - codeListProvider: WAVE + partyCode: ee92b6b7-ac27-4537-87df-019c69389346 + '404': + description: | + In case the consumer is requesting a `transportDocumentReference` that does not exist. + headers: + API-Version: + $ref: '#/components/headers/API-Version' + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + examples: + notFoundExample: + summary: | + transportDocumentReference not found + description: | + The `transportDocumentReference` does not exist. + + **NB**: The `errorCode` is not yet standardized by DCSA. The value `7003` is just a "random example". + value: + httpMethod: GET + requestUri: /v3/endorsement-chains/td-987 + statusCode: 404 + statusCodeText: Not Found + statusCodeMessage: transportDocumentReference not found + providerCorrelationReference: 4426d965-0dd8-4005-8c63-dc68b01c4962 + errorDateTime: '2024-09-04T09:41:00Z' + errors: + - errorCode: 7003 + errorCodeText: transportDocumentReference not found + errorCodeMessage: The requested Endorsement Chain does not exist + '500': + description: | + In case a server error occurs in provider system a `500` (Internal Server Error) is returned + headers: + API-Version: + $ref: '#/components/headers/API-Version' + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + examples: + internalServerErrorExample: + summary: | + Internal Server Error while fetching the Transport Document + description: | + An Internal Server Error has occurred - the consumer should contact {provider-support} and provide the `providerCorrelationReference` (in the example this is `4426d965-0dd8-4005-8c63-dc68b01c4962`) + + **NB**: The `errorCode` is not yet standardized by DCSA. The value `7003` is just a "random example". + value: + httpMethod: GET + requestUri: /v3/endorsement-chains/td-987 + statusCode: 500 + statusCodeText: Internal Server Error + statusCodeMessage: Internal Server Error occurred while fetching the Endorsement Chain + providerCorrelationReference: 4426d965-0dd8-4005-8c63-dc68b01c4962 + errorDateTime: '2024-09-04T09:41:00Z' + errors: + - errorCode: 7003 + errorCodeText: Internal Error occurred + errorCodeMessage: Internal Error occurred + default: + description: | + For other errors the error object should be populated with relevant information + headers: + API-Version: + $ref: '#/components/headers/API-Version' + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + examples: + tooManyRequestsExample: + summary: | + Fetching too many `Endorsement Chain` requests + description: | + Calling the endPoint + + GET /v3/endorsement-chains/td-987 + + too many times within a time period. + + **NB**: `errorCode` not yet standardized by DCSA. Value `7003` is just a "random example" + value: + httpMethod: GET + requestUri: /v3/endorsement-chains/td-987 + statusCode: 429 + statusCodeText: Too Many Requests + statusCodeMessage: | + Too many requests to fetch an Endorsement Chain have been made. Please try again in 1 hour + providerCorrelationReference: 4426d965-0dd8-4005-8c63-dc68b01c4962 + errorDateTime: '2024-09-04T09:41:00Z' + errors: + - errorCode: 7003 + errorCodeText: Max Endorsement Chain requests reached + errorCodeMessage: A maximum of 10 Endorsement Chains can be requested per hour + x-stoplight: + id: vtixadg6x2syf +components: + headers: + API-Version: + description: | + SemVer used to indicate the version of the contract (API version) returned. + schema: + type: string + example: 3.0.3 + schemas: + EndorsementChain: + type: object + title: Endorsement Chain + description: | + An endorsement Chain linked to a particular `transportDocumentReference` and potentially a `transportDocumentSubReference`. + properties: + transportDocumentReference: + type: string + pattern: '^\S(?:.*\S)?$' + maxLength: 20 + description: | + A unique number allocated by the shipping line to the `Transport Document` and the main number used for the tracking of the status of the shipment. + example: HHL71800000 + transportDocumentSubReference: + type: string + pattern: '^\S(?:.*\S)?$' + maxLength: 100 + description: | + Additional reference that can be optionally used alongside the `transportDocumentReference` in order to distinguish between versions of the same `Transport Document`. + example: Version_1 + carrierSCACCode: + type: string + maxLength: 4 + pattern: ^\S+$ + description: | + The carrier code, based on SCAC code (provided by [NMFTA](https://nmfta.org/scac/)), that Issued the `transportDocumentReference`. + example: MAEU + endorsementChain: + type: array + description: | + A list of one or more actions that affect an eBL, starting from its issuance onward. It is equivalent to the "back side" of a physical Bill of Lading. The type of actions recorded in the endorsement chain as defined by the DCSA standard are listed below: + + - **Issue:** The act of issuing an eBL to the `Issue to` party, meaning the designated recipient of the action (typically the shipper or their on behalf of party). + - **Endorse:** The act of transferring the rights and obligations associated with the eBL to a new endorsee, meaning the designated recipient of the action, allowing them to claim or deal with the goods. Only applicable to negotiable eBL (`isToOrder=true`). + - **Sign:** The act of visibly marking the actor's possession of the eBL within the chain. This action has no designated recipient and can only be performed while the actor is the current possessor of the eBL, similar to how a party may sign a physical Bill of Lading while in their possession. + - **Request Surrender for Amendment:** The act of surrendering an eBL so that the carrier can issue an amended version. If the request is accepted, the original eBL is voided, and the amended eBL must be reissued with a new endorsement chain. This action is also used when switching the eBL to a physical document (“switch to paper”), which is treated as part of the amendment process in the DCSA standard. + - **Request Surrender for Delivery:** The act of surrendering an eBL to the carrier to request delivery of the goods. + - **Blank Endorse:** The act of transferring the rights and obligations associated with the eBL in blank, meaning that the endorsement does not specify a recipient. A party in possession of a blank endorsed eBL is allowed to claim or deal with the goods. Only applicable to negotiable eBL (`isToOrder=true`). + - **Endorse to Order:** The act of transferring the rights and obligations associated with the eBL to a new endorsee, meaning the designated recipient of the action, allowing them to claim or deal with the goods. The newly appointed endorsee can further endorse the eBL to another party. Only applicable to negotiable eBL (`isToOrder=true`). + - **Transfer:** The act of transferring the possession of the eBL to the recipient. + - **Surrendered:** The act of confirming that the eBL has been surrendered, meaning that its lifecycle is completed. + items: + $ref: '#/components/schemas/EndorsementChainLink' + required: + - transportDocumentReference + x-stoplight: + id: 066ruwj8rjsl3 + EndorsementChainLink: + type: object + title: Endorsement Chain Link + description: | + Entry in the endorsement chain. + properties: + actionDateTime: + type: string + format: date-time + description: Date time when the action occurred. + example: '2024-09-04T09:41:00Z' + actionCode: + type: string + maxLength: 50 + description: | + The action performed by the actor. This should be one of: + - `ISSUE` (The actor issued the document to the recipient, who is the first possessor of the eBL, as designated by the `Issue to Party`) + - `ENDORSE` (The actor endorsed the document to the recipient) + - `SIGN` (The actor signed the eBL while it was in the actor's possession) + - `SURRENDER_FOR_DELIVERY` (The actor requested to surrender the eBL to the recipient for delivery) + - `SURRENDER_FOR_AMENDMENT` (The actor requested to surrender the eBL to the recipient for amendment) + - `BLANK_ENDORSE` (The actor endorsed the document in blank) + - `ENDORSE_TO_ORDER` (The actor endorsed the document to order of the recipient, allowing the recipient to further endorse the eBL to another party) + - `TRANSFER` (The actor transferred the possession of the eBL to the recipient) + - `SURRENDERED` (The actor acknowledged that the eBL has been accepted and the lifecycle of the eBL is accomplished) + + Not all actions are applicable to all surrender requests. The combination and order of endorsement chain entries may differ by eBL Solution Provider, based on their rulebook and/or bilateral agreements with carriers. + example: ISSUE + actor: + $ref: '#/components/schemas/ActorParty' + recipient: + $ref: '#/components/schemas/RecipientParty' + auditReference: + type: string + maxLength: 100 + description: | + An identifier issued by the eBL Solution Provider, used for auditing purposes to verify that the endorsement chain action has been securely recorded. The format of this identifier may vary depending on the technology employed by the eBL Solution Provider. + example: AUDIT0007 + required: + - actionDateTime + - actionCode + - actor + x-stoplight: + id: nqte4j0metv3c + ActorParty: + type: object + title: Actor Party + description: | + Refers to a company or a legal entity. + properties: + partyName: + type: string + pattern: '^\S(?:.*\S)?$' + maxLength: 70 + description: | + Name of the party. + example: Globeteam + eblPlatform: + type: string + pattern: ^\S+$ + maxLength: 4 + description: | + The eBL platform of the `Actor Party`. + The value **MUST** be one of: + - `WAVE` (Wave) + - `CARX` (CargoX) + - `ESSD` (EssDOCS - This value has been **deprecated**. Please use `IDT`) + - `IDT` (ICE Digital Trade) + - `BOLE` (Bolero) + - `EDOX` (EdoxOnline) + - `IQAX` (IQAX) + - `SECR` (Secro) + - `TRGO` (TradeGO) + - `ETEU` (eTEU) + - `TRAC` (Enigio trace:original) + - `BRIT` (BRITC eBL) + - `COVA` (Covantis) + - `ETIT` (e-title) + - `KTNE` (KTNET) + - `CRED` (Credore) + - `BLOC` (BlockPeer Technologies) + - `DOCU` (DocuTrade) + - `AEOT` (AEOTrade) + - `SGTD` (SGTraDex) + example: BOLE + identifyingCodes: + type: array + minItems: 1 + items: + $ref: '#/components/schemas/IdentifyingCode' + taxLegalReferences: + description: | + A list of `Tax References` for a `Party` + type: array + items: + $ref: '#/components/schemas/TaxLegalReference' + representedParty: + $ref: '#/components/schemas/RepresentedActorParty' + required: + - partyName + - eblPlatform + - identifyingCodes + x-stoplight: + id: 3upb0p2fmjr1o + RecipientParty: + type: object + title: Recipient Party + description: | + Refers to a company or a legal entity. + properties: + partyName: + type: string + pattern: '^\S(?:.*\S)?$' + maxLength: 70 + description: | + Name of the party. + example: Globeteam + eblPlatform: + type: string + pattern: ^\S+$ + maxLength: 4 + description: | + The eBL platform of the `Recipient Party`. + The value **MUST** be one of: + - `WAVE` (Wave) + - `CARX` (CargoX) + - `ESSD` (EssDOCS - This value has been **deprecated**. Please use `IDT`) + - `IDT` (ICE Digital Trade) + - `BOLE` (Bolero) + - `EDOX` (EdoxOnline) + - `IQAX` (IQAX) + - `SECR` (Secro) + - `TRGO` (TradeGO) + - `ETEU` (eTEU) + - `TRAC` (Enigio trace:original) + - `BRIT` (BRITC eBL) + - `COVA` (Covantis) + - `ETIT` (e-title) + - `KTNE` (KTNET) + - `CRED` (Credore) + - `BLOC` (BlockPeer Technologies) + - `DOCU` (DocuTrade) + - `AEOT` (AEOTrade) + - `SGTD` (SGTraDex) + example: BOLE + identifyingCodes: + type: array + minItems: 1 + items: + $ref: '#/components/schemas/IdentifyingCode' + taxLegalReferences: + description: | + A list of `Tax References` for a `Party` + type: array + items: + $ref: '#/components/schemas/TaxLegalReference' + representedParty: + $ref: '#/components/schemas/RepresentedRecipientParty' + required: + - partyName + - eblPlatform + - identifyingCodes + x-stoplight: + id: pj314v0g4y1tt + RepresentedActorParty: + type: object + title: Represented Party + description: The party on whose behalf the action was performed. + properties: + partyName: + type: string + pattern: '^\S(?:.*\S)?$' + maxLength: 70 + description: | + Name of the party. + example: Globeteam + identifyingCodes: + type: array + items: + $ref: '#/components/schemas/IdentifyingCode' + required: + - partyName + x-stoplight: + id: 9ycphfqr51ij0 + RepresentedRecipientParty: + type: object + title: Represented Party + description: The party on whose behalf the action was directed. + properties: + partyName: + type: string + pattern: '^\S(?:.*\S)?$' + maxLength: 70 + description: | + Name of the party. + example: Globeteam + identifyingCodes: + type: array + items: + $ref: '#/components/schemas/IdentifyingCode' + required: + - partyName + x-stoplight: + id: mw1bmfsg5raw5 + IdentifyingCode: + type: object + title: Identifying Code + description: | + A code and value that uniquely identifies a party. + properties: + codeListProvider: + type: string + maxLength: 100 + description: | + A list of codes identifying a party. Possible values are: + + - `WAVE` (Wave) + - `CARX` (CargoX) + - `ESSD` (EssDOCS - This value has been **deprecated**. Please use `IDT`) + - `IDT` (ICE Digital Trade) + - `BOLE` (Bolero) + - `EDOX` (EdoxOnline) + - `IQAX` (IQAX) + - `SECR` (Secro) + - `TRGO` (TradeGO) + - `ETEU` (eTEU) + - `TRAC` (Enigio trace:original) + - `BRIT` (BRITC eBL) + - `COVA` (Covantis) + - `ETIT` (e-title) + - `KTNE` (KTNET) + - `CRED` (Credore) + - `BLOC` (BlockPeer Technologies) + - `DOCU` (DocuTrade) + - `AEOT` (AEOTrade) + - `SGTD` (SGTraDex) + - `GSBN` (Global Shipping Business Network) + - `WISE` (WiseTech) + - `GLEIF` (Global Legal Entity Identifier Foundation) + - `W3C` (World Wide Web Consortium) + - `DNB` (Dun and Bradstreet) + - `FMC` (Federal Maritime Commission) + - `DCSA` (Digital Container Shipping Association) + - `ZZZ` (Mutually defined) + example: W3C + partyCode: + type: string + maxLength: 150 + description: | + Code to identify the party as provided by the `codeListProvider` + example: MSK + codeListName: + type: string + maxLength: 100 + description: | + The name of the code list, code generation mechanism or code authority for the `partyCode`. Example values could be: + + - `DID` (Decentralized Identifier) for `codeListProvider` `W3C` + - `LEI` (Legal Entity Identifier) for `codeListProvider` `GLEIF` + - `DUNS` (Data Universal Numbering System) for `codeListProvider` `DNB` + example: DID + required: + - codeListProvider + - partyCode + x-stoplight: + id: put9eguoq2t7c + TaxLegalReference: + type: object + title: Tax & Legal Reference + description: | + Reference that uniquely identifies a party for tax and/or legal purposes in accordance with the relevant jurisdiction. + + A small list of **potential** examples: + + | Type | Country | Description | + |-------|:-------:|-------------| + |EORI|NL|Economic Operators Registration and Identification| + |PAN|IN|Goods and Services Tax Identification Number in India| + |GSTIN|IN|Goods and Services Tax Identification Number in India| + |IEC|IN|Importer-Exported Code in India| + |RUC|EC|Registro Único del Contribuyente in Ecuador| + |RUC|PE|Registro Único del Contribuyente in Peru| + |NIF|MG|Numéro d'Identification Fiscal in Madagascar| + |NIF|DZ|Numéro d'Identification Fiscal in Algeria| + properties: + type: + type: string + pattern: '^\S(?:.*\S)?$' + maxLength: 50 + description: | + The reference type code as defined by the relevant tax and/or legal authority. + example: PAN + countryCode: + type: string + pattern: '^[A-Z]{2}$' + minLength: 2 + maxLength: 2 + description: | + The 2 characters for the country code using [ISO 3166-1 alpha-2](https://www.iso.org/obp/ui/#iso:pub:PUB500001:en) + + **Note:** In case the `countryCode` is unknown it is possible to use the code `ZZ`. + example: IN + value: + type: string + pattern: '^\S(?:.*\S)?$' + maxLength: 35 + description: | + The value of the `taxLegalReference` + example: AAAAA0000A + required: + - type + - countryCode + - value + x-stoplight: + id: 0khdcyd0d1qe8 + ################# + # Error Responses + ################# + ErrorResponse: + title: Error Response + type: object + description: Unexpected error + properties: + httpMethod: + description: | + The HTTP method used to make the request e.g. `GET`, `POST`, etc + type: string + example: POST + enum: + - GET + - HEAD + - POST + - PUT + - DELETE + - OPTIONS + - PATCH + requestUri: + description: | + The URI that was requested. + type: string + example: /v3/endorsement-chains/td-123 + statusCode: + description: | + The HTTP status code returned. + type: integer + format: int32 + example: 400 + statusCodeText: + description: | + A standard short description corresponding to the HTTP status code. + type: string + maxLength: 50 + example: Bad Request + statusCodeMessage: + description: | + A long description corresponding to the HTTP status code with additional information. + type: string + maxLength: 200 + example: The supplied data could not be accepted + providerCorrelationReference: + description: | + A unique identifier to the HTTP request within the scope of the API provider. + type: string + maxLength: 100 + example: 4426d965-0dd8-4005-8c63-dc68b01c4962 + errorDateTime: + description: | + The DateTime corresponding to the error occurring. + type: string + format: date-time + example: '2024-09-04T09:41:00Z' + errors: + type: array + description: | + An array of errors providing more detail about the root cause. + minItems: 1 + items: + $ref: '#/components/schemas/DetailedError' + required: + - httpMethod + - requestUri + - statusCode + - statusCodeText + - errorDateTime + - errors + x-stoplight: + id: ta8hqblvnmxe2 + DetailedError: + type: object + title: Detailed Error + description: | + A detailed description of what has caused the error. + properties: + errorCode: + type: integer + format: int32 + description: | + The detailed error code returned. The codes returned are maintained by the implementor of the API. For further explanation as to the meaning of an errorCode please consult the implementer. + + **Note:** Previously it was the intention of DCSA to standardize this but it never gained traction. + minimum: 7000 + maximum: 9999 + example: 7003 + property: + type: string + maxLength: 100 + description: | + The name of the property causing the error. + example: facilityCode + value: + type: string + maxLength: 500 + description: | + The value of the property causing the error serialised as a string exactly as in the original request. + example: SG SIN WHS + jsonPath: + type: string + maxLength: 500 + description: | + A path to the property causing the error, formatted according to [JSONpath](https://github.com/json-path/JsonPath). + example: $.location.facilityCode + errorCodeText: + description: | + A standard short description corresponding to the `errorCode`. + type: string + maxLength: 100 + example: invalidData + errorCodeMessage: + type: string + maxLength: 5000 + description: | + A long description corresponding to the `errorCode` with additional information. + example: Spaces not allowed in facility code + required: + - errorCodeText + - errorCodeMessage + x-stoplight: + id: 5mgugds9k1y1y diff --git a/ebl/v3/issuance/EBL_ISS_v3.0.4.yaml b/ebl/v3/issuance/EBL_ISS_v3.0.4.yaml index 129a9bc2..6e041406 100644 --- a/ebl/v3/issuance/EBL_ISS_v3.0.4.yaml +++ b/ebl/v3/issuance/EBL_ISS_v3.0.4.yaml @@ -711,7 +711,7 @@ components: type: string maxLength: 150 description: | - Code to identify the party as provided by the code list provider + Code to identify the party as provided by the `codeListProvider` example: MSK codeListName: type: string @@ -813,8 +813,8 @@ components: description: | The status of the `Transport Document`. Possible values are: - `DRAFT` (The Transport Document is currently a Draft) - - `APPROVED` (The Transport Document has been Approved by consumer) - - `ISSUED` (The Transport Document has been Issued by provider) + - `APPROVED` (The Transport Document has been Approved by shipper) + - `ISSUED` (The Transport Document has been Issued by carrier) - `PENDING_SURRENDER_FOR_AMENDMENT` (The Transport Document has a pending Surrender for Amendment) - `SURRENDERED_FOR_AMENDMENT` (The Transport Document is Surrendered for Amendment) - `PENDING_SURRENDER_FOR_DELIVERY` (The Transport Document has a pending Surrender for Delivery) @@ -975,7 +975,7 @@ components: maxLength: 250 description: | The text to be displayed on the `Transport Document` as evidence that the goods have been received for shipment or shipped on board. - example: 'Received for Shipment CMA CGM CONCORDE 28-Jul-2022 CMA CGM Agences France SAS As agents for the Carrier' + example: 'Received for Shipment CMA CGM CONCORDE 28-Jul-2022 CMA CGM Agences France SAS As agents for the carrier' termsAndConditions: type: string maxLength: 50000 diff --git a/pint/v3/EBL_PINT_v3.0.0.yaml b/pint/v3/EBL_PINT_v3.0.0.yaml index 0239d388..f326aac6 100644 --- a/pint/v3/EBL_PINT_v3.0.0.yaml +++ b/pint/v3/EBL_PINT_v3.0.0.yaml @@ -1414,7 +1414,7 @@ components: type: string maxLength: 150 description: | - Code to identify the party as provided by the code list provider + Code to identify the party as provided by the `codeListProvider`. example: MSK codeListName: type: string @@ -1513,8 +1513,8 @@ components: description: | The status of the `Transport Document`. Possible values are: - `DRAFT` (The Transport Document is currently a Draft) - - `APPROVED` (The Transport Document has been Approved by consumer) - - `ISSUED` (The Transport Document has been Issued by provider) + - `APPROVED` (The Transport Document has been Approved by shipper) + - `ISSUED` (The Transport Document has been Issued by carrier) - `PENDING_SURRENDER_FOR_AMENDMENT` (The Transport Document has a pending Surrender for Amendment) - `SURRENDERED_FOR_AMENDMENT` (The Transport Document is Surrendered for Amendment) - `PENDING_SURRENDER_FOR_DELIVERY` (The Transport Document has a pending Surrender for Delivery) @@ -1675,7 +1675,7 @@ components: maxLength: 250 description: | The text to be displayed on the `Transport Document` as evidence that the goods have been received for shipment or shipped on board. - example: 'Received for Shipment CMA CGM CONCORDE 28-Jul-2022 CMA CGM Agences France SAS As agents for the Carrier' + example: 'Received for Shipment CMA CGM CONCORDE 28-Jul-2022 CMA CGM Agences France SAS As agents for the carrier' termsAndConditions: type: string maxLength: 50000 From 46ffb0f2b42a879a77d13122c7cbc20d9f665b57 Mon Sep 17 00:00:00 2001 From: "henrik.larsen@dcsa.org" Date: Thu, 21 May 2026 15:54:02 +0200 Subject: [PATCH 4/5] Fix typos --- ebl/v3/endorsement/EBL_END_v3.0.4.yaml | 55 ++++++++++---------------- 1 file changed, 20 insertions(+), 35 deletions(-) diff --git a/ebl/v3/endorsement/EBL_END_v3.0.4.yaml b/ebl/v3/endorsement/EBL_END_v3.0.4.yaml index 0a78acd5..3851ce98 100644 --- a/ebl/v3/endorsement/EBL_END_v3.0.4.yaml +++ b/ebl/v3/endorsement/EBL_END_v3.0.4.yaml @@ -1,14 +1,12 @@ openapi: 3.0.3 -x-stoplight: - id: 7fs9ikeopa5ok info: - version: 3.0.3 + version: 3.0.4 title: DCSA eBL Endorsement Chain API description: |

DCSA OpenAPI specification for electronic Bill of Lading (eBL) Endorsement Chain (END)

### Changelog and GitHub - For a changelog please click [here](https://github.com/dcsaorg/DCSA-OpenAPI/tree/master/ebl/v3/endorsement#v303). If you have any questions, feel free to [Contact Us](https://dcsa.org/get-involved/contact-us). + For a changelog please click [here](https://github.com/dcsaorg/DCSA-OpenAPI/tree/master/ebl/v3/endorsement#v304). If you have any questions, feel free to [Contact Us](https://dcsa.org/get-involved/contact-us). API specification issued by [DCSA.org](https://dcsa.org/). license: @@ -68,9 +66,9 @@ paths: required: false schema: type: string - example: 3.0.3 + example: 3.0.4 description: | - An API-Version header **MAY** be added to the request (optional); if added it **MUST** contain the SemVer of the consumer. + An API-Version header **MAY** be added to the request (optional); if added it **MUST** contain the SemVer of the carrier. responses: '200': description: | @@ -317,7 +315,7 @@ paths: partyCode: ee92b6b7-ac27-4537-87df-019c69389346 '404': description: | - In case the consumer is requesting a `transportDocumentReference` that does not exist. + In case the carrier is requesting a `transportDocumentReference` that does not exist. headers: API-Version: $ref: '#/components/headers/API-Version' @@ -347,7 +345,7 @@ paths: errorCodeMessage: The requested Endorsement Chain does not exist '500': description: | - In case a server error occurs in provider system a `500` (Internal Server Error) is returned + In case a server error occurs in eBL Solution Provider system a `500` (Internal Server Error) is returned headers: API-Version: $ref: '#/components/headers/API-Version' @@ -360,7 +358,7 @@ paths: summary: | Internal Server Error while fetching the Transport Document description: | - An Internal Server Error has occurred - the consumer should contact {provider-support} and provide the `providerCorrelationReference` (in the example this is `4426d965-0dd8-4005-8c63-dc68b01c4962`) + An Internal Server Error has occurred - the carrier should contact {eBL Solution Provider-support} and provide the `providerCorrelationReference` (in the example this is `4426d965-0dd8-4005-8c63-dc68b01c4962`) **NB**: The `errorCode` is not yet standardized by DCSA. The value `7003` is just a "random example". value: @@ -410,8 +408,6 @@ paths: - errorCode: 7003 errorCodeText: Max Endorsement Chain requests reached errorCodeMessage: A maximum of 10 Endorsement Chains can be requested per hour - x-stoplight: - id: vtixadg6x2syf components: headers: API-Version: @@ -419,7 +415,7 @@ components: SemVer used to indicate the version of the contract (API version) returned. schema: type: string - example: 3.0.3 + example: 3.0.4 schemas: EndorsementChain: type: object @@ -466,8 +462,7 @@ components: $ref: '#/components/schemas/EndorsementChainLink' required: - transportDocumentReference - x-stoplight: - id: 066ruwj8rjsl3 + EndorsementChainLink: type: object title: Endorsement Chain Link @@ -510,8 +505,7 @@ components: - actionDateTime - actionCode - actor - x-stoplight: - id: nqte4j0metv3c + ActorParty: type: object title: Actor Party @@ -570,8 +564,7 @@ components: - partyName - eblPlatform - identifyingCodes - x-stoplight: - id: 3upb0p2fmjr1o + RecipientParty: type: object title: Recipient Party @@ -630,8 +623,7 @@ components: - partyName - eblPlatform - identifyingCodes - x-stoplight: - id: pj314v0g4y1tt + RepresentedActorParty: type: object title: Represented Party @@ -650,8 +642,7 @@ components: $ref: '#/components/schemas/IdentifyingCode' required: - partyName - x-stoplight: - id: 9ycphfqr51ij0 + RepresentedRecipientParty: type: object title: Represented Party @@ -670,8 +661,7 @@ components: $ref: '#/components/schemas/IdentifyingCode' required: - partyName - x-stoplight: - id: mw1bmfsg5raw5 + IdentifyingCode: type: object title: Identifying Code @@ -732,8 +722,7 @@ components: required: - codeListProvider - partyCode - x-stoplight: - id: put9eguoq2t7c + TaxLegalReference: type: object title: Tax & Legal Reference @@ -781,11 +770,10 @@ components: - type - countryCode - value - x-stoplight: - id: 0khdcyd0d1qe8 - ################# - # Error Responses - ################# + + ################# + # Error Responses + ################# ErrorResponse: title: Error Response type: object @@ -853,8 +841,7 @@ components: - statusCodeText - errorDateTime - errors - x-stoplight: - id: ta8hqblvnmxe2 + DetailedError: type: object title: Detailed Error @@ -904,5 +891,3 @@ components: required: - errorCodeText - errorCodeMessage - x-stoplight: - id: 5mgugds9k1y1y From aaca23338788c0661d4e1f5622c28821faecc424 Mon Sep 17 00:00:00 2001 From: "henrik.larsen@dcsa.org" Date: Thu, 21 May 2026 16:22:05 +0200 Subject: [PATCH 5/5] Fix example uri --- ebl/v3/endorsement/EBL_END_v3.0.4.yaml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ebl/v3/endorsement/EBL_END_v3.0.4.yaml b/ebl/v3/endorsement/EBL_END_v3.0.4.yaml index 3851ce98..d3cfef73 100644 --- a/ebl/v3/endorsement/EBL_END_v3.0.4.yaml +++ b/ebl/v3/endorsement/EBL_END_v3.0.4.yaml @@ -333,7 +333,7 @@ paths: **NB**: The `errorCode` is not yet standardized by DCSA. The value `7003` is just a "random example". value: httpMethod: GET - requestUri: /v3/endorsement-chains/td-987 + requestUri: /endorsement-chains/td-987 statusCode: 404 statusCodeText: Not Found statusCodeMessage: transportDocumentReference not found @@ -363,7 +363,7 @@ paths: **NB**: The `errorCode` is not yet standardized by DCSA. The value `7003` is just a "random example". value: httpMethod: GET - requestUri: /v3/endorsement-chains/td-987 + requestUri: /endorsement-chains/td-987 statusCode: 500 statusCodeText: Internal Server Error statusCodeMessage: Internal Server Error occurred while fetching the Endorsement Chain @@ -390,14 +390,14 @@ paths: description: | Calling the endPoint - GET /v3/endorsement-chains/td-987 + GET /endorsement-chains/td-987 too many times within a time period. **NB**: `errorCode` not yet standardized by DCSA. Value `7003` is just a "random example" value: httpMethod: GET - requestUri: /v3/endorsement-chains/td-987 + requestUri: /endorsement-chains/td-987 statusCode: 429 statusCodeText: Too Many Requests statusCodeMessage: | @@ -796,7 +796,7 @@ components: description: | The URI that was requested. type: string - example: /v3/endorsement-chains/td-123 + example: /endorsement-chains/td-123 statusCode: description: | The HTTP status code returned.