86 lines
5.5 KiB
YAML
86 lines
5.5 KiB
YAML
openapi: 3.1.0
|
|
info:
|
|
title: Baiyue Cross-region Event Contracts
|
|
version: 1.0.0
|
|
paths: {}
|
|
components:
|
|
schemas:
|
|
FirstLegLoadingPlanCompletedV2:
|
|
type: object
|
|
required: [loadingPlanId, sourceContainerBookingId, containerNo, estimatedPortArrivalAt, actualPortArrivalAt, estimatedWarehouseArrivalAt, orders]
|
|
properties:
|
|
loadingPlanId: {type: string}
|
|
sourceContainerBookingId: {type: string, minLength: 1, description: Immutable Firstleg container booking identity}
|
|
containerNo: {type: string, minLength: 1, description: Uppercase normalized physical container number frozen before loading completion publication}
|
|
cabinetNo: {type: string}
|
|
warehouseId: {type: string}
|
|
warehouseName: {type: string}
|
|
estimatedPortArrivalAt: {type: [string, 'null'], format: local-date-time, description: Frozen source-local estimated port arrival; null when Firstleg has no fact}
|
|
actualPortArrivalAt: {type: [string, 'null'], format: local-date-time, description: Frozen source-local actual port arrival; never copied from an estimate}
|
|
estimatedWarehouseArrivalAt: {type: [string, 'null'], format: local-date-time, description: Frozen source-local estimated warehouse arrival; null when Firstleg has no fact}
|
|
orders:
|
|
type: array
|
|
items: {$ref: '#/components/schemas/FirstLegLoadingPlanCompletedOrderV2'}
|
|
FirstLegLoadingPlanCompletedOrderV2:
|
|
type: object
|
|
required: [sourceInboundId, customerId, customerName, palletCount, packageCount, productQuantity, volumeCbm, volumeWeightKg, items, orderType, pallets, destinationType]
|
|
properties:
|
|
sourceInboundId: {type: string}
|
|
sourceOrderId: {type: string}
|
|
sourceOrderNo: {type: string}
|
|
inboundCode: {type: string}
|
|
customerId: {type: string, minLength: 1, description: Trusted customer identity frozen by Firstleg}
|
|
customerName: {type: string, minLength: 1, maxLength: 128, description: Immutable trusted container/customer name snapshot; consumers must not query domestic IAM}
|
|
packageCount: {type: integer, minimum: 1}
|
|
productQuantity: {type: [integer, 'null'], minimum: 0, description: Final loaded product quantity; null when unavailable}
|
|
palletCount: {type: [integer, 'null'], minimum: 1, description: Distinct physical pallet count from Firstleg allocation pallet identity; never a planned zero placeholder}
|
|
volumeCbm: {type: [number, 'null'], minimum: 0, description: Final loaded volume in cubic metres}
|
|
volumeWeightKg: {type: [number, 'null'], minimum: 0, description: Sum of final loaded item dimensional weight facts; null when unavailable}
|
|
items: {type: array, items: {type: object}}
|
|
orderType: {type: string, enum: [FIRST_LEG, ONE_CLICK_DROPSHIP]}
|
|
pallets: {type: array, items: {$ref: '#/components/schemas/FirstLegPalletSnapshotV2'}}
|
|
destinationType: {type: string, enum: [FBA, OVERSEAS]}
|
|
FirstLegContainerShippingNodeRecordedV1:
|
|
type: object
|
|
required: [sourceContainerBookingId, containerNo, standardNode, nodeSequence, observedAt, actualAt, providerCode, providerEventId, providerNodeCode, rawPayloadHash]
|
|
properties:
|
|
queryId: {type: [string, 'null'], description: Automatic tracking task ID; null for a direct platform manual node.}
|
|
oceanBookingId: {type: [string, 'null'], description: Ocean booking ID when the physical container has already been linked; null is valid for a direct manual node.}
|
|
sourceContainerBookingId: {type: string, minLength: 1}
|
|
containerNo: {type: string, minLength: 1, description: Uppercase normalized physical container number; never cabinetNo or a technical identity}
|
|
standardNode: {type: string}
|
|
nodeSequence: {type: integer}
|
|
observedAt: {type: string, format: date-time}
|
|
actualAt: {type: string, format: date-time}
|
|
providerCode: {type: string}
|
|
providerEventId: {type: string}
|
|
providerNodeCode: {type: string}
|
|
rawPayloadHash: {type: string, pattern: '^[0-9a-fA-F]{64}$'}
|
|
FirstLegPalletSnapshotV2:
|
|
type: object
|
|
required: [palletNo, skuPackages]
|
|
properties:
|
|
palletNo: {type: string, minLength: 1}
|
|
skuPackages:
|
|
type: array
|
|
items: {$ref: '#/components/schemas/FirstLegSkuPackageSnapshotV2'}
|
|
FirstLegSkuPackageSnapshotV2:
|
|
type: object
|
|
required: [sourceInboundDetailId, skuCode, productName, packageCount, productQuantity, cartonMarks]
|
|
properties:
|
|
sourceInboundDetailId: {type: string, minLength: 1, description: Exact source inbound detail identity matching the order item; never infer from SKU because multiple details may share a SKU}
|
|
skuCode: {type: string}
|
|
productName: {type: [string, 'null']}
|
|
packageCount: {type: integer, minimum: 1}
|
|
productQuantity: {type: integer, minimum: 1}
|
|
cartonMarks: {type: array, items: {type: string}, minItems: 1}
|
|
OverseasContainerUnloadedV1:
|
|
type: object
|
|
required: [sourceContainerBookingId, containerNo, unloadingCompletedAt, unloadingPhotoUploadedAt]
|
|
properties:
|
|
sourceContainerBookingId: {type: string, minLength: 1}
|
|
containerNo: {type: string, minLength: 1, description: Must equal the immutable normalized Firstleg container number; the CN consumer never overwrites it}
|
|
unloadingCompletedAt: {type: string, format: date-time}
|
|
unloadingPhotoUploadedAt: {type: string, format: date-time}
|
|
actualEmptyReportedAt: {type: [string, 'null'], format: date-time}
|