Complete the selective V2 checkpoint with its minimal AgentBus, object-storage, replay persistence, and validated-workbench shared dependency closure.
692 lines
24 KiB
JSON
692 lines
24 KiB
JSON
{
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"$id": "https://th-hotel.local/schemas/booking-decision-input-v2.schema.json",
|
|
"title": "BookingDecisionInputV2",
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"contract_meta",
|
|
"input_hash",
|
|
"message_material",
|
|
"layer3_result",
|
|
"decision_context",
|
|
"rooming_list_resolutions",
|
|
"evidence_registry",
|
|
"evidence_refs"
|
|
],
|
|
"properties": {
|
|
"contract_meta": { "$ref": "#/$defs/contractMeta" },
|
|
"input_hash": { "$ref": "#/$defs/sha256" },
|
|
"message_material": { "$ref": "#/$defs/messageMaterial" },
|
|
"layer3_result": { "$ref": "#/$defs/layer3Result" },
|
|
"decision_context": { "$ref": "#/$defs/decisionContext" },
|
|
"rooming_list_resolutions": {
|
|
"type": "array",
|
|
"items": { "$ref": "#/$defs/roomingListResolutionV2" }
|
|
},
|
|
"evidence_registry": {
|
|
"type": "array",
|
|
"items": { "$ref": "#/$defs/evidenceRef" }
|
|
},
|
|
"evidence_refs": { "$ref": "#/$defs/evidenceIdList" }
|
|
},
|
|
"$defs": {
|
|
"nonBlank": { "type": "string", "minLength": 1 },
|
|
"nullableNonBlank": { "type": ["string", "null"], "minLength": 1 },
|
|
"sha256": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
|
|
"contractMeta": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"contract_version",
|
|
"catalog_version",
|
|
"parser_version",
|
|
"agent_profile_version",
|
|
"processing_run_id",
|
|
"source_message_id",
|
|
"source_revision"
|
|
],
|
|
"properties": {
|
|
"contract_version": { "const": "booking-contracts-v2" },
|
|
"catalog_version": { "$ref": "#/$defs/nonBlank" },
|
|
"parser_version": { "$ref": "#/$defs/nonBlank" },
|
|
"agent_profile_version": { "$ref": "#/$defs/nonBlank" },
|
|
"processing_run_id": { "$ref": "#/$defs/nonBlank" },
|
|
"source_message_id": { "$ref": "#/$defs/nonBlank" },
|
|
"source_revision": { "type": "integer", "minimum": 0 }
|
|
}
|
|
},
|
|
"evidenceIdList": {
|
|
"type": "array",
|
|
"items": { "$ref": "#/$defs/nonBlank" },
|
|
"uniqueItems": true
|
|
},
|
|
"evidenceRef": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"evidence_id",
|
|
"kind",
|
|
"source_message_id",
|
|
"locator",
|
|
"content_hash",
|
|
"is_current_material"
|
|
],
|
|
"properties": {
|
|
"evidence_id": { "$ref": "#/$defs/nonBlank" },
|
|
"kind": {
|
|
"enum": [
|
|
"CURRENT_SUBJECT",
|
|
"CURRENT_BODY",
|
|
"QUOTED_HISTORY",
|
|
"ATTACHMENT",
|
|
"WORKBOOK_SHEET",
|
|
"WORKBOOK_ROW",
|
|
"IMAGE",
|
|
"OCR_TEXT",
|
|
"CONTEXT_RECORD",
|
|
"USER_CORRECTION"
|
|
]
|
|
},
|
|
"source_message_id": { "$ref": "#/$defs/nonBlank" },
|
|
"locator": { "$ref": "#/$defs/nonBlank" },
|
|
"content_hash": { "$ref": "#/$defs/sha256" },
|
|
"is_current_material": { "type": "boolean" }
|
|
}
|
|
},
|
|
"messageMaterial": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["current", "history", "attachments"],
|
|
"properties": {
|
|
"current": { "$ref": "#/$defs/currentMessage" },
|
|
"history": {
|
|
"type": "array",
|
|
"items": { "$ref": "#/$defs/historyMessage" }
|
|
},
|
|
"attachments": {
|
|
"type": "array",
|
|
"items": { "$ref": "#/$defs/attachmentMaterial" }
|
|
}
|
|
}
|
|
},
|
|
"currentMessage": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["message_id", "subject", "body_text", "subject_evidence_ref", "body_evidence_ref"],
|
|
"properties": {
|
|
"message_id": { "$ref": "#/$defs/nonBlank" },
|
|
"subject": { "type": "string" },
|
|
"body_text": { "type": "string" },
|
|
"subject_evidence_ref": { "$ref": "#/$defs/nonBlank" },
|
|
"body_evidence_ref": { "$ref": "#/$defs/nonBlank" }
|
|
}
|
|
},
|
|
"historyMessage": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["sequence", "message_id", "body_text", "body_is_complete", "body_evidence_ref"],
|
|
"properties": {
|
|
"sequence": { "type": "integer", "minimum": 0 },
|
|
"message_id": { "$ref": "#/$defs/nonBlank" },
|
|
"body_text": { "type": "string" },
|
|
"body_is_complete": { "const": true },
|
|
"body_evidence_ref": { "$ref": "#/$defs/nonBlank" }
|
|
}
|
|
},
|
|
"attachmentMaterial": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"attachment_id",
|
|
"file_name",
|
|
"media_type",
|
|
"size_bytes",
|
|
"content_hash",
|
|
"material_observations",
|
|
"evidence_refs"
|
|
],
|
|
"properties": {
|
|
"attachment_id": { "$ref": "#/$defs/nonBlank" },
|
|
"file_name": { "type": "string" },
|
|
"media_type": { "$ref": "#/$defs/nonBlank" },
|
|
"size_bytes": { "type": "integer", "minimum": 0 },
|
|
"content_hash": { "$ref": "#/$defs/sha256" },
|
|
"material_observations": {
|
|
"type": "array",
|
|
"items": { "$ref": "#/$defs/materialObservation" }
|
|
},
|
|
"evidence_refs": { "$ref": "#/$defs/evidenceIdList" }
|
|
}
|
|
},
|
|
"layer3Result": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"parse_status",
|
|
"source_facts",
|
|
"structured_mentions",
|
|
"target_bindings",
|
|
"neutral_relationships",
|
|
"material_observations",
|
|
"display_information",
|
|
"material_dispositions",
|
|
"parse_issues",
|
|
"evidence_refs"
|
|
],
|
|
"properties": {
|
|
"parse_status": { "enum": ["READY", "PARTIAL", "FAILED", "NOT_APPLICABLE"] },
|
|
"source_facts": {
|
|
"type": "array",
|
|
"items": { "$ref": "#/$defs/sourceFact" }
|
|
},
|
|
"structured_mentions": {
|
|
"type": "array",
|
|
"items": { "$ref": "#/$defs/structuredMention" }
|
|
},
|
|
"target_bindings": {
|
|
"type": "array",
|
|
"items": { "$ref": "#/$defs/targetBinding" }
|
|
},
|
|
"neutral_relationships": {
|
|
"type": "array",
|
|
"items": { "$ref": "#/$defs/neutralRelationship" }
|
|
},
|
|
"material_observations": {
|
|
"type": "array",
|
|
"items": { "$ref": "#/$defs/materialObservation" }
|
|
},
|
|
"display_information": {
|
|
"type": "array",
|
|
"items": { "$ref": "#/$defs/displayInformation" }
|
|
},
|
|
"material_dispositions": {
|
|
"type": "array",
|
|
"items": { "$ref": "#/$defs/materialDisposition" }
|
|
},
|
|
"parse_issues": {
|
|
"type": "array",
|
|
"items": { "$ref": "#/$defs/contractIssue" }
|
|
},
|
|
"evidence_refs": { "$ref": "#/$defs/evidenceIdList" }
|
|
}
|
|
},
|
|
"jsonScalar": { "type": ["string", "number", "integer", "boolean", "null"] },
|
|
"sourceFact": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"fact_id",
|
|
"fact_role",
|
|
"target_ref",
|
|
"source_unit_ref",
|
|
"room_item_ref",
|
|
"source_value",
|
|
"normalized_source_value",
|
|
"evidence_refs"
|
|
],
|
|
"properties": {
|
|
"fact_id": { "$ref": "#/$defs/nonBlank" },
|
|
"fact_role": { "$ref": "#/$defs/nonBlank" },
|
|
"target_ref": { "$ref": "#/$defs/nullableNonBlank" },
|
|
"source_unit_ref": { "$ref": "#/$defs/nullableNonBlank" },
|
|
"room_item_ref": { "$ref": "#/$defs/nullableNonBlank" },
|
|
"source_value": { "$ref": "#/$defs/jsonScalar" },
|
|
"normalized_source_value": { "$ref": "#/$defs/jsonScalar" },
|
|
"evidence_refs": { "$ref": "#/$defs/evidenceIdList" }
|
|
}
|
|
},
|
|
"neutralParameters": {
|
|
"type": "object",
|
|
"propertyNames": {
|
|
"not": {
|
|
"enum": [
|
|
"business_type",
|
|
"action_kind",
|
|
"booking_type",
|
|
"task_card",
|
|
"candidate_decision",
|
|
"linked_action",
|
|
"derived_action"
|
|
]
|
|
}
|
|
},
|
|
"additionalProperties": { "$ref": "#/$defs/jsonScalar" }
|
|
},
|
|
"structuredMention": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["mention_id", "semantic_code", "scope", "target_ref", "parameters", "evidence_refs"],
|
|
"properties": {
|
|
"mention_id": { "$ref": "#/$defs/nonBlank" },
|
|
"semantic_code": { "$ref": "#/$defs/nonBlank" },
|
|
"scope": { "enum": ["MESSAGE", "TARGET", "MATERIAL"] },
|
|
"target_ref": { "$ref": "#/$defs/nullableNonBlank" },
|
|
"parameters": { "$ref": "#/$defs/neutralParameters" },
|
|
"evidence_refs": { "$ref": "#/$defs/evidenceIdList" }
|
|
}
|
|
},
|
|
"targetBinding": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["binding_id", "material_ref", "target_ref", "binding_status", "evidence_refs"],
|
|
"properties": {
|
|
"binding_id": { "$ref": "#/$defs/nonBlank" },
|
|
"material_ref": { "$ref": "#/$defs/nonBlank" },
|
|
"target_ref": { "$ref": "#/$defs/nullableNonBlank" },
|
|
"binding_status": { "enum": ["BOUND", "UNRESOLVED", "AMBIGUOUS", "CONFLICT"] },
|
|
"evidence_refs": { "$ref": "#/$defs/evidenceIdList" }
|
|
}
|
|
},
|
|
"neutralRelationship": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["relationship_id", "relationship_type", "from_target_ref", "to_target_ref", "evidence_refs"],
|
|
"properties": {
|
|
"relationship_id": { "$ref": "#/$defs/nonBlank" },
|
|
"relationship_type": {
|
|
"enum": ["ALLOTMENT_SOURCE_TO_ACTUAL", "GROUP_CODE_REPLACEMENT", "SOURCE_TO_TARGET", "OTHER_NEUTRAL"]
|
|
},
|
|
"from_target_ref": { "$ref": "#/$defs/nonBlank" },
|
|
"to_target_ref": { "$ref": "#/$defs/nonBlank" },
|
|
"evidence_refs": { "$ref": "#/$defs/evidenceIdList" }
|
|
}
|
|
},
|
|
"materialObservation": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["observation_id", "material_ref", "observation_kind", "target_ref", "attributes", "evidence_refs"],
|
|
"properties": {
|
|
"observation_id": { "$ref": "#/$defs/nonBlank" },
|
|
"material_ref": { "$ref": "#/$defs/nonBlank" },
|
|
"observation_kind": {
|
|
"enum": [
|
|
"POSSIBLE_GUEST_LIST_SPREADSHEET",
|
|
"IMAGE_ATTACHMENT",
|
|
"PAYMENT_RELATED_TEXT",
|
|
"RAW_ATTACHMENT",
|
|
"WORKBOOK_STRUCTURE",
|
|
"OTHER_NEUTRAL"
|
|
]
|
|
},
|
|
"target_ref": { "$ref": "#/$defs/nullableNonBlank" },
|
|
"attributes": { "$ref": "#/$defs/neutralParameters" },
|
|
"evidence_refs": { "$ref": "#/$defs/evidenceIdList" }
|
|
}
|
|
},
|
|
"displayInformation": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["display_id", "scope", "target_ref", "source_label", "sequence", "evidence_refs"],
|
|
"properties": {
|
|
"display_id": { "$ref": "#/$defs/nonBlank" },
|
|
"scope": { "enum": ["MESSAGE", "TARGET"] },
|
|
"target_ref": { "$ref": "#/$defs/nullableNonBlank" },
|
|
"source_label": { "$ref": "#/$defs/nonBlank" },
|
|
"sequence": { "type": "integer", "minimum": 0 },
|
|
"evidence_refs": { "$ref": "#/$defs/evidenceIdList" }
|
|
}
|
|
},
|
|
"materialDisposition": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["material_ref", "disposition", "evidence_refs"],
|
|
"properties": {
|
|
"material_ref": { "$ref": "#/$defs/nonBlank" },
|
|
"disposition": { "enum": ["FACT", "MENTION", "DISPLAY", "REVIEW", "IGNORED_AS_TEMPLATE"] },
|
|
"evidence_refs": { "$ref": "#/$defs/evidenceIdList" }
|
|
}
|
|
},
|
|
"decisionContext": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"context_scope",
|
|
"target_candidates",
|
|
"catalog_resolutions",
|
|
"order_contexts",
|
|
"direction_context",
|
|
"issues",
|
|
"evidence_refs"
|
|
],
|
|
"properties": {
|
|
"context_scope": { "enum": ["MESSAGE", "TARGETS"] },
|
|
"target_candidates": {
|
|
"type": "array",
|
|
"items": { "$ref": "#/$defs/targetCandidate" }
|
|
},
|
|
"catalog_resolutions": {
|
|
"type": "array",
|
|
"items": { "$ref": "#/$defs/catalogResolution" }
|
|
},
|
|
"order_contexts": {
|
|
"type": "array",
|
|
"items": { "$ref": "#/$defs/orderContextV2" }
|
|
},
|
|
"direction_context": { "$ref": "#/$defs/directionContext" },
|
|
"issues": {
|
|
"type": "array",
|
|
"items": { "$ref": "#/$defs/contractIssue" }
|
|
},
|
|
"evidence_refs": { "$ref": "#/$defs/evidenceIdList" }
|
|
}
|
|
},
|
|
"targetCandidate": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["target_ref", "resolution_status", "group_code", "order_candidate_ids", "evidence_refs"],
|
|
"properties": {
|
|
"target_ref": { "$ref": "#/$defs/nonBlank" },
|
|
"resolution_status": { "enum": ["RESOLVED", "UNRESOLVED", "AMBIGUOUS", "CONFLICT"] },
|
|
"group_code": { "$ref": "#/$defs/nullableNonBlank" },
|
|
"order_candidate_ids": { "type": "array", "items": { "$ref": "#/$defs/nonBlank" }, "uniqueItems": true },
|
|
"evidence_refs": { "$ref": "#/$defs/evidenceIdList" }
|
|
}
|
|
},
|
|
"catalogResolution": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["resolution_id", "target_ref", "resolution_kind", "catalog_scope", "status", "candidate_codes", "evidence_refs"],
|
|
"properties": {
|
|
"resolution_id": { "$ref": "#/$defs/nonBlank" },
|
|
"target_ref": { "$ref": "#/$defs/nonBlank" },
|
|
"resolution_kind": { "enum": ["ROOM_TYPE", "RATE_CODE", "ACCOUNT", "MARKET", "SOURCE"] },
|
|
"catalog_scope": { "enum": ["FIT", "GROUP", "NOT_APPLICABLE"] },
|
|
"status": { "enum": ["ZERO_CANDIDATES", "ONE_CANDIDATE", "MULTIPLE_CANDIDATES", "NOT_APPLICABLE"] },
|
|
"candidate_codes": { "type": "array", "items": { "$ref": "#/$defs/nonBlank" }, "uniqueItems": true },
|
|
"evidence_refs": { "$ref": "#/$defs/evidenceIdList" }
|
|
}
|
|
},
|
|
"layer4ResolutionStatus": {
|
|
"enum": [
|
|
"RESOLVED",
|
|
"UNRESOLVED",
|
|
"NOT_APPLICABLE"
|
|
]
|
|
},
|
|
"roomtypeResolutionV2": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["value", "candidates", "status", "reason_code", "evidence_refs"],
|
|
"properties": {
|
|
"value": { "$ref": "#/$defs/nullableNonBlank" },
|
|
"candidates": {
|
|
"type": "array",
|
|
"items": { "$ref": "#/$defs/nonBlank" },
|
|
"uniqueItems": true
|
|
},
|
|
"status": { "$ref": "#/$defs/layer4ResolutionStatus" },
|
|
"reason_code": { "$ref": "#/$defs/nonBlank" },
|
|
"evidence_refs": { "$ref": "#/$defs/evidenceIdList" }
|
|
},
|
|
"allOf": [
|
|
{
|
|
"if": { "properties": { "status": { "const": "RESOLVED" } } },
|
|
"then": {
|
|
"properties": {
|
|
"value": { "$ref": "#/$defs/nonBlank" },
|
|
"candidates": { "minItems": 1, "maxItems": 1 }
|
|
}
|
|
},
|
|
"else": { "properties": { "value": { "type": "null" } } }
|
|
}
|
|
]
|
|
},
|
|
"rateRuleSetResolutionV2": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["value", "status", "reason_code", "evidence_refs"],
|
|
"properties": {
|
|
"value": { "type": ["string", "null"], "enum": ["FIT", "GROUP", "GROUP_AND_FIT", null] },
|
|
"status": { "$ref": "#/$defs/layer4ResolutionStatus" },
|
|
"reason_code": { "$ref": "#/$defs/nonBlank" },
|
|
"evidence_refs": { "$ref": "#/$defs/evidenceIdList" }
|
|
},
|
|
"allOf": [
|
|
{
|
|
"if": { "properties": { "status": { "const": "RESOLVED" } } },
|
|
"then": { "properties": { "value": { "enum": ["FIT", "GROUP", "GROUP_AND_FIT"] } } },
|
|
"else": { "properties": { "value": { "type": "null" } } }
|
|
}
|
|
]
|
|
},
|
|
"ratePackageV2": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["rate_code", "breakfast_included", "breakfast_restaurant_code"],
|
|
"properties": {
|
|
"rate_code": { "$ref": "#/$defs/nonBlank" },
|
|
"breakfast_included": { "type": "boolean" },
|
|
"breakfast_restaurant_code": {
|
|
"type": ["string", "null"],
|
|
"enum": ["LEELA", "BUALUANG", null]
|
|
}
|
|
},
|
|
"oneOf": [
|
|
{
|
|
"properties": {
|
|
"breakfast_included": { "const": false },
|
|
"breakfast_restaurant_code": { "type": "null" }
|
|
}
|
|
},
|
|
{
|
|
"properties": {
|
|
"breakfast_included": { "const": true },
|
|
"breakfast_restaurant_code": { "enum": ["LEELA", "BUALUANG"] }
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"ratePackageResolutionV2": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["value", "candidates", "status", "reason_code", "evidence_refs"],
|
|
"properties": {
|
|
"value": { "anyOf": [{ "$ref": "#/$defs/ratePackageV2" }, { "type": "null" }] },
|
|
"candidates": {
|
|
"type": "array",
|
|
"items": { "$ref": "#/$defs/ratePackageV2" },
|
|
"uniqueItems": true
|
|
},
|
|
"status": { "$ref": "#/$defs/layer4ResolutionStatus" },
|
|
"reason_code": { "$ref": "#/$defs/nonBlank" },
|
|
"evidence_refs": { "$ref": "#/$defs/evidenceIdList" }
|
|
},
|
|
"allOf": [
|
|
{
|
|
"if": { "properties": { "status": { "const": "RESOLVED" } } },
|
|
"then": {
|
|
"properties": {
|
|
"value": { "$ref": "#/$defs/ratePackageV2" },
|
|
"candidates": { "minItems": 1, "maxItems": 1 }
|
|
}
|
|
},
|
|
"else": { "properties": { "value": { "type": "null" } } }
|
|
}
|
|
]
|
|
},
|
|
"sourceRoomRateResolutionV2": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["room_item_ref", "resolution"],
|
|
"properties": {
|
|
"room_item_ref": { "$ref": "#/$defs/nonBlank" },
|
|
"resolution": { "$ref": "#/$defs/ratePackageResolutionV2" }
|
|
}
|
|
},
|
|
"rateOptionV2": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"applicable_booking_types",
|
|
"directory_company",
|
|
"directory_rule_set",
|
|
"source_room_rate_resolutions",
|
|
"rate_package",
|
|
"evidence_refs"
|
|
],
|
|
"properties": {
|
|
"applicable_booking_types": {
|
|
"type": "array",
|
|
"items": { "enum": ["FIT", "GROUP"] },
|
|
"minItems": 1,
|
|
"maxItems": 2,
|
|
"uniqueItems": true
|
|
},
|
|
"directory_company": { "$ref": "#/$defs/nonBlank" },
|
|
"directory_rule_set": { "enum": ["FIT", "GROUP", "GROUP_AND_FIT"] },
|
|
"source_room_rate_resolutions": {
|
|
"type": "array",
|
|
"items": { "$ref": "#/$defs/sourceRoomRateResolutionV2" }
|
|
},
|
|
"rate_package": { "$ref": "#/$defs/ratePackageResolutionV2" },
|
|
"evidence_refs": { "$ref": "#/$defs/evidenceIdList" }
|
|
}
|
|
},
|
|
"sourceRoomContextV2": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"room_item_ref",
|
|
"source_room_raw",
|
|
"source_room_name",
|
|
"quantity",
|
|
"source_price_raw",
|
|
"source_price",
|
|
"source_breakfast_included",
|
|
"source_breakfast_restaurant_code",
|
|
"roomtype_resolution",
|
|
"evidence_refs"
|
|
],
|
|
"properties": {
|
|
"room_item_ref": { "$ref": "#/$defs/nonBlank" },
|
|
"source_room_raw": { "$ref": "#/$defs/nullableNonBlank" },
|
|
"source_room_name": { "$ref": "#/$defs/nullableNonBlank" },
|
|
"quantity": { "type": ["integer", "null"], "minimum": 1 },
|
|
"source_price_raw": { "$ref": "#/$defs/nullableNonBlank" },
|
|
"source_price": { "type": ["number", "null"], "exclusiveMinimum": 0 },
|
|
"source_breakfast_included": { "type": ["boolean", "null"] },
|
|
"source_breakfast_restaurant_code": { "$ref": "#/$defs/nullableNonBlank" },
|
|
"roomtype_resolution": { "$ref": "#/$defs/roomtypeResolutionV2" },
|
|
"evidence_refs": { "$ref": "#/$defs/evidenceIdList" }
|
|
}
|
|
},
|
|
"sourceStayUnitContextV2": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["source_unit_ref", "arrival_date", "departure_date", "source_rooms", "evidence_refs"],
|
|
"properties": {
|
|
"source_unit_ref": { "$ref": "#/$defs/nonBlank" },
|
|
"arrival_date": { "$ref": "#/$defs/nullableNonBlank" },
|
|
"departure_date": { "$ref": "#/$defs/nullableNonBlank" },
|
|
"source_rooms": {
|
|
"type": "array",
|
|
"items": { "$ref": "#/$defs/sourceRoomContextV2" }
|
|
},
|
|
"evidence_refs": { "$ref": "#/$defs/evidenceIdList" }
|
|
}
|
|
},
|
|
"catalogAuditV2": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"directory_version",
|
|
"effective_mapping_version",
|
|
"directory_manifest_sha256",
|
|
"effective_mapping_manifest_sha256",
|
|
"roomtype_projection_sha256",
|
|
"rate_projection_sha256"
|
|
],
|
|
"properties": {
|
|
"directory_version": { "$ref": "#/$defs/nonBlank" },
|
|
"effective_mapping_version": { "$ref": "#/$defs/nonBlank" },
|
|
"directory_manifest_sha256": { "$ref": "#/$defs/sha256" },
|
|
"effective_mapping_manifest_sha256": { "$ref": "#/$defs/sha256" },
|
|
"roomtype_projection_sha256": { "$ref": "#/$defs/sha256" },
|
|
"rate_projection_sha256": { "$ref": "#/$defs/sha256" }
|
|
}
|
|
},
|
|
"orderContextV2": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"order_scope_ref",
|
|
"group_code",
|
|
"source_profile_code",
|
|
"source_units",
|
|
"rate_options",
|
|
"catalog_audit",
|
|
"evidence_refs"
|
|
],
|
|
"properties": {
|
|
"order_scope_ref": { "$ref": "#/$defs/nonBlank" },
|
|
"group_code": { "$ref": "#/$defs/nullableNonBlank" },
|
|
"source_profile_code": { "enum": ["QBD", "LIANTAI"] },
|
|
"source_units": {
|
|
"type": "array",
|
|
"items": { "$ref": "#/$defs/sourceStayUnitContextV2" }
|
|
},
|
|
"rate_options": {
|
|
"type": "array",
|
|
"items": { "$ref": "#/$defs/rateOptionV2" },
|
|
"minItems": 1,
|
|
"maxItems": 2
|
|
},
|
|
"catalog_audit": { "$ref": "#/$defs/catalogAuditV2" },
|
|
"evidence_refs": { "$ref": "#/$defs/evidenceIdList" }
|
|
}
|
|
},
|
|
"directionContext": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["source_direction", "confidence", "evidence_refs"],
|
|
"properties": {
|
|
"source_direction": { "enum": ["INBOUND", "OUTBOUND", "INTERNAL", "UNKNOWN"] },
|
|
"confidence": { "enum": ["EXACT", "UNRESOLVED", "CONFLICT"] },
|
|
"evidence_refs": { "$ref": "#/$defs/evidenceIdList" }
|
|
}
|
|
},
|
|
"roomingListResolutionV2": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"material_ref",
|
|
"attachment_id",
|
|
"current_excel",
|
|
"rooming_list_label",
|
|
"tour_code",
|
|
"tour_code_candidates",
|
|
"target_status",
|
|
"reason_code",
|
|
"evidence_refs"
|
|
],
|
|
"properties": {
|
|
"material_ref": { "$ref": "#/$defs/nonBlank" },
|
|
"attachment_id": { "$ref": "#/$defs/nonBlank" },
|
|
"current_excel": { "type": "boolean" },
|
|
"rooming_list_label": { "type": "boolean" },
|
|
"tour_code": { "$ref": "#/$defs/nullableNonBlank" },
|
|
"tour_code_candidates": { "type": "array", "items": { "$ref": "#/$defs/nonBlank" }, "uniqueItems": true },
|
|
"target_status": { "$ref": "#/$defs/layer4ResolutionStatus" },
|
|
"reason_code": { "$ref": "#/$defs/nonBlank" },
|
|
"evidence_refs": { "$ref": "#/$defs/evidenceIdList" }
|
|
}
|
|
},
|
|
"contractIssue": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["issue_id", "code", "severity", "scope", "target_ref", "message_key", "evidence_refs"],
|
|
"properties": {
|
|
"issue_id": { "$ref": "#/$defs/nonBlank" },
|
|
"code": { "$ref": "#/$defs/nonBlank" },
|
|
"severity": { "enum": ["INFO", "WARNING", "ERROR", "BLOCKER"] },
|
|
"scope": { "enum": ["MESSAGE", "MATERIAL", "TARGET", "FIELD", "RELATIONSHIP"] },
|
|
"target_ref": { "$ref": "#/$defs/nullableNonBlank" },
|
|
"message_key": { "$ref": "#/$defs/nonBlank" },
|
|
"evidence_refs": { "$ref": "#/$defs/evidenceIdList" },
|
|
"retryable": { "type": "boolean" }
|
|
}
|
|
}
|
|
}
|
|
}
|